作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个表单中的 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);
}
}
最佳答案
解决这个问题的方法不止一种:
spring.profiles.active=jobrunner1
从命令行激活一个,如果您想运行多个作业,则使用 spring.profiles.active=jobrunner1,jobrunner2
。此解决方案可让您保留多个 CommandLineRunner
实现。CommandLineRunner
有一个 main
方法,所以你可以保留它们,或者只是转换成常规的 main
类。关于java - 具有单独的 CommandLineRunner 的 SpringBoot 应用程序不应在应用程序启动时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478545/
我是一名优秀的程序员,十分优秀!