gpt4 book ai didi

java - 具有单独的 CommandLineRunner 的 SpringBoot 应用程序不应在应用程序启动时运行

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:40 25 4
gpt4 key购买 nike

我有一个表单中的 springboot 应用程序

src/main/java/example
- Application.java
- JobConfiguration.java
scheduler
- Job1.java
- Job1Runner.java
- Job2.java
- Job2Runner.java

我希望能够在本地按需运行我的作业,因此我为每个作业创建了一个单独的 Runner 类(例如 JobRunner.java),但目前当我运行我的Application 类,它还运行我的 Job1Runner 类,因为它扩展了 CommandLineRunner。有没有办法让我的运行者分开? (所以 Application 类不运行它们,并且 JobRunner 不互相运行等)

申请

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

作业配置

@Configuration
@EnableScheduling
public class JobConfiguration implements SchedulingConfigurer {

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// Register jobs
}

}

JobRunner 示例

@SpringBootApplication(scanBasePackages = "com.example")
public class JobXRunner implements CommandLineRunner { // Where X is my job index

@Autowired
private final JobX job;

@Override
public void run(String... args) throws Exception {
job.run();
}

public static void main(String[] args) throws Exception {
SpringApplication.run(JobXRunner.class, args);

}
}

最佳答案

解决这个问题的方法不止一种:

  1. 创建多个配置文件并将它们分配给工作负责人。使用 spring.profiles.active=jobrunner1 从命令行激活一个,如果您想运行多个作业,则使用 spring.profiles.active=jobrunner1,jobrunner2。此解决方案可让您保留多个 CommandLineRunner 实现。
  2. 指定要运行的类,这又取决于您执行代码的方式。如果使用 IDE 或 Maven 或 Gradle 等构建工具运行,则必须指定主类名称,因为默认解析不起作用。参见 this Maven 特定解决方案的线程。如果您正在运行 jar,请参阅 this线。 CommandLineRunner 有一个 main 方法,所以你可以保留它们,或者只是转换成常规的 main 类。

关于java - 具有单独的 CommandLineRunner 的 SpringBoot 应用程序不应在应用程序启动时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com