使用 Spring Batch 一个接一个地链接两个作业的最佳方法
Best approach to chain two jobs one after another using Spring Batch
我有两份工作(Job1,Job2)
Job2 依赖于 job1 的结果,所以它必须等到 job 1 完成
我需要以某种方式将它们链接起来:
当job1完成后需要调用job2。怎么做?最后使用 tasklet 调用 job2?
另一种方式可能是调用程序(它是一些调度程序服务)将负责在作业 1 returns 后立即调用作业 2 - 不太好,因为我需要调用job1 同步.
您将如何使用 spring 批处理实现两个链式(和依赖的作业)?
谢谢。
您可以使用 JobStep to launch the second job from within the first job. See 5.3.6 Externalizing Flow Definitions and Dependencies Between Jobs
这是我依次启动两个(列表)作业的方式:
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;
3- 启动它们
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();
}
});
}
我希望这对阅读这篇文章的新人有所帮助post
我有两份工作(Job1,Job2) Job2 依赖于 job1 的结果,所以它必须等到 job 1 完成
我需要以某种方式将它们链接起来:
当job1完成后需要调用job2。怎么做?最后使用 tasklet 调用 job2?
另一种方式可能是调用程序(它是一些调度程序服务)将负责在作业 1 returns 后立即调用作业 2 - 不太好,因为我需要调用job1 同步.
您将如何使用 spring 批处理实现两个链式(和依赖的作业)?
谢谢。
您可以使用 JobStep to launch the second job from within the first job. See 5.3.6 Externalizing Flow Definitions and Dependencies Between Jobs
这是我依次启动两个(列表)作业的方式:
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;
3- 启动它们
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();
}
});
}
我希望这对阅读这篇文章的新人有所帮助post