1.首先通过
spring.batch.job.enabled=false在 application.properties中 指定禁用自动作业启动
2.在您的主类中,执行-
ApplicationContext ctx =SpringApplication.run(SpringBatchMain.class, args);假设您的主类名为-
SpringBatchMain.java。
这将初始化上下文,而无需启动任何作业。
3.一旦上下文被初始化,您可以在主类中对此JobLauncher bean进行操作
JobLauncher jobLauncher =(JobLauncher) ctx.getBean("jobLauncher");或执行操作Autowired,并通过调用来按特定的顺序依次启动特定的作业
jobLauncher.run(job, jobParameters)。
您可以
job从在步骤2初始化的上下文中获取特定实例。
您始终可以使用任何有序集合,通过迭代该集合来放置作业并启动作业。
4.只要您的JobLauncher配置为同步,即主线程等待
jobLauncher.run()调用完成,并且JobLauncher的默认行为,则上述技术有效。
如果已将jobLauncher定义为使用AsyncTaskExecutor,则作业将并行启动,并且不会保持顺序排列。
希望能帮助到你 !!
编辑:
我正在尝试使用
@OrderStephane Nicoll指出的注释,它似乎仅对创建作业的有序集合有所帮助,并且您可以按此顺序迭代和启动作业。
以下组件为我提供了指定订单中的工作,
@Componentpublic class MyJobs { @Autowired private List<Job> jobs; public List<Job> getJobs() { return jobs; }}我可以做,
MyJobs myJobs = (MyJobs) ctx.getBean("myJobs"); 在定义了bean的主类中,@Bean public MyJobs myJobs() { return new MyJobs(); }我可以
myJobs按照@Order注释指定的顺序迭代并启动作业。



