我正在使用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();
}
如何在上述配置中配置动态步骤?
答案 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();