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

时间:2015-01-18 21:35:44

标签: java spring scheduled-tasks spring-boot spring-batch

我有两份工作(Job1,Job2) Job2取决于job1的结果,因此必须等到作业1完成

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

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

  2. 另一种方式可能是,一旦job1返回,调用者(这是一些调度程序服务)将负责调用job2 - 不是很好,因为需要同步调用job1。

    < / LI>

    如何使用spring batch实现两个链式(和依赖的作业)?

    谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用JobStep从第一份作业中启动第二份作业。见5.3.6 Externalizing Flow Definitions and Dependencies Between Jobs

答案 1 :(得分:0)

这是我一个接一个地启动两个(列表)作业的方式:

1-使用@Order声明两个Job 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();
        }
    });
}

我希望这可以帮助新人阅读这篇文章