【发布时间】:2016-12-02 10:36:15
【问题描述】:
我想使用 Spring Batch 实现一个类似于以下的 Job:
Step1 -----> Step2 --> End
^ |
| |
------------
在 Step2 中的某些条件下,由 Step2 的自定义 ExitCode 确定,要么再次启动 Step1,然后再启动 Step2,要么再次启动 Step2,否则处理将结束。
我的想象是这样的:
return jobBuilderFactory.get("jobName").incrementer(new RunIdIncrementer())
.start(step1()).next(step2())
.on("condition1").end()
.from(step1())
.on("condition2").to(step1()).end().build();
但是很明显,Step1经过Step2的condition2处理后,Step2就不会再启动了。
如何实现这样的递归批处理?
编辑:我设法找到了一个解决方案,但是,我还不知道它是否只是一个肮脏的解决方案,因为它似乎很简单:
jobBuilderFactory.get("jobName")
.flow(step1())
.next(step2())
.on("launchStep1Again")
.to(step1())
.from(step2())
.on("endJobExecution")
.end().build().build();
因此,从使用 Fluent API 的 .start() 方法到其 .flow() 方法的简单更改似乎可以解决问题。
【问题讨论】:
标签: java spring spring-batch