如何使用Spring Batch在作业中动态添加步骤

时间:2019-11-04 07:47:12

标签: java spring spring-batch

我正在使用spring batch,其中我有一个用例来配置具有动态步骤的作业。步骤数将取决于用户发送的请求。 目前,我正在使用Tasklet方法来处理该步骤。

我不想分块处理数据。

任何解决此问题的方法,因此我可以使用动态步骤来配置作业。

请从JobConfiguration中找到代码段。

@Bean
public Job createBatchJob() {
    return jobFactory.get(JOB_TYPE)
            .preventRestart()
            .start(step1())
            .build();
}

@Bean
public Step step1() {
    return stepFactory.get(STEP_TYPE)
    .tasklet(batchTasklet).build();
}

如何在上述配置中配置动态步骤?

2 个答案:

答案 0 :(得分:0)

这是另一种情况,并非与How to create dynamic steps in Spring Batch完全相同。

基本上,我们需要动态的步骤,但是要在构建作业后将其延迟添加到作业中。

所以说我已经配置了一个作业,以处理一些文件。 但是用户请求批处理并可以提交多个文件,现在基于用户通过Rest api提交的文件数,我想将这么多步骤添加到创建的作业中。

这种情况是否支持在作业建立后向其添加步骤?

或者有一种动态创建作业配置的方法。

希望这可以澄清问题。

答案 1 :(得分:0)

您需要使用

SimpleJobBuilder

 // Start your dynamic batch job building with first request sent by the user. 
 SimpleJobBuilder jobBuilder = jobBuilderFactory.get(YOUR_JOB_NAME)
                           .start(new TaskletStep(YOUR_TASKLET_STEP));

您可以编写自己的通用 GenericTaskletStep 类,该类将用户输入用于批处理。将批处理逻辑嵌入到该通用类中。然后遍历输入并动态添加 GenericTaskletStep

// Skip the first input that already added in start step above.
for(int i = 1; i < inputs.size(); i++) {
    jobBuilder.next(new GenericTaskletStep(TASKLET_STEP_NAME))
}

// Finally build your job
jobBuilder.build();