使用 Spring Batch 一个接一个地链接两个作业的最佳方法

Best approach to chain two jobs one after another using Spring Batch

我有两份工作(Job1,Job2) Job2 依赖于 job1 的结果,所以它必须等到 job 1 完成

我需要以某种方式将它们链接起来:

  1. 当job1完成后需要调用job2。怎么做?最后使用 tasklet 调用 job2?

  2. 另一种方式可能是调用程序(它是一些调度程序服务)将负责在作业 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