Java 使用Spring批处理将两个作业逐个链接的最佳方法
我有两份工作(工作1,工作2) 作业2取决于作业1的结果,因此它必须等到作业1完成 我需要以某种方式将它们链接起来:Java 使用Spring批处理将两个作业逐个链接的最佳方法,java,spring,scheduled-tasks,spring-boot,spring-batch,Java,Spring,Scheduled Tasks,Spring Boot,Spring Batch,我有两份工作(工作1,工作2) 作业2取决于作业1的结果,因此它必须等到作业1完成 我需要以某种方式将它们链接起来: 作业1完成后,需要调用作业2。怎么做?最后使用tasklet调用job2 另一种方式可能是调用程序(它是一些调度程序服务)将负责在job1返回时调用job2-这不是很好,因为than需要同步调用job1 如何使用SpringBatch实现两个链式(和依赖的)作业 谢谢。您可以使用从第一个作业中启动第二个作业。请参见这是我一个接一个地启动两个(列表)作业的方法: 1-用@Order
谢谢。您可以使用从第一个作业中启动第二个作业。请参见这是我一个接一个地启动两个(列表)作业的方法: 1-用@Order声明两个作业bean
@Order(1) // The first in the List
@Bean(name = "firstJob")
public Job firstJob() { .... }
@Order(2) // Second job to be launched
@Bean(name = "secondJob")
public Job secondJob() { .... }
2-注入作业列表
@Autowired
List<Job> jobs;
我希望这有助于新读者阅读这篇文章啊,这可能会起到作用。但是,您认为我应该以这种方式链接作业还是将该责任委托给调度程序?这取决于您希望它们如何运行。如果您需要它们是独立的(在不同的线程中运行),那么您必须找到一种方法来持久化第一个作业的输出,以供第二个作业处理。如果您同意它们同步运行,那么JobStep对您来说是一个简单的解决方案
public void run(String... args) {
JobParameters params = new JobParametersBuilder()
.addString("JobID", String.valueOf(System.currentTimeMillis()))
.toJobParameters();
jobs.forEach(job -> {
try {
jobLauncher.run(job, params);
} catch (Exception e) {
logger.error("Job {} cannot be executed", job.getName());
e.printStackTrace();
}
});
}