我有一个表单中的 springboot 应用程序
src/main/java/example
- Application.java
- JobConfiguration.java
scheduler
- Job1.java
- Job1Runner.java
- Job2.java
- Job2Runner.java
我希望能够在本地按需运行我的作业,因此我为每个作业创建一个单独的 Runner 类(例如
JobRunner.java
),但目前当我运行我的 Application
类时,它也运行我的 Job1Runner
类,因为它扩展了命令行运行程序。有什么办法可以让我的跑步者分开吗? (所以 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);
}
}
解决这个问题的方法不止一种:
spring.profiles.active=jobrunner1
从命令行激活一项,如果您想运行多个作业,则使用 spring.profiles.active=jobrunner1,jobrunner2
。该解决方案可让您保留多个 CommandLineRunner
实现。CommandLineRunner
有一个 main
方法,因此您可以保留它们,或者只是转换为常规 main
类。