Java 使用Spring批处理将两个作业逐个链接的最佳方法

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,工作2) 作业2取决于作业1的结果,因此它必须等到作业1完成

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

  • 作业1完成后,需要调用作业2。怎么做?最后使用tasklet调用job2

  • 另一种方式可能是调用程序(它是一些调度程序服务)将负责在job1返回时调用job2-这不是很好,因为than需要同步调用job1

  • 如何使用SpringBatch实现两个链式(和依赖的)作业


    谢谢。

    您可以使用从第一个作业中启动第二个作业。请参见

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

    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();
            }
        });
    }