如何以一定顺序运行Spring Batch Jobs(Spring Boot)?
我正在使用Spring Boot使用Spring Batch开发。
我使用Spring Boot提供的最小配置,并定义了一些Jobs(根本没有XML配置)。但是当我运行应用程序时
SpringApplication.run(App.class, args);
这些作业以任意顺序顺序执行。
我在带@Configuration
注释的类中以这种方式定义作业,其余由Spring完成:
@Beanpublic Job requestTickets() {
return jobBuilderFactory.get(Config.JOB_REQUEST_TICKETS)
.start(stepRequestTickets())
.build();
}
如何指示框架按特定顺序运行作业?
编辑:此警告可以提示吗?(也许没事)
2016-12-29 17:45:33.320 WARN 3528 --- [main] o.s.b.c.c.a.DefaultBatchConfigurer: No datasource was provided...using a Map based JobRepository
回答:
1.首先通过spring.batch.job.enabled=false
在 指定禁用自动作业启动
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,则作业将并行启动,并且不会保持顺序排列。
希望能帮助到你 !!
我正在尝试使用@Order
Stephane 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注释指定的顺序迭代并启动作业。
以上是 如何以一定顺序运行Spring Batch Jobs(Spring Boot)? 的全部内容, 来源链接: utcz.com/qa/424720.html