Spring 批处理 - 后退一步或重新执行先前执行的步骤

Spring batch - executing one step back OR Re-executing previously executed steps

我有一个 spring 批处理作业,假设有 5 个步骤 (step1 --> step2 --> step3 --> step4 --> step5)。我已经配置了一个 StepExectutionListener,它监听 2 个事件

beforeStep()afterStep() 所有步骤。

我的问题是,如果我当前在beforeStep()方法中,要执行的步骤是step2,我可以让spring-batch execute step1再次?执行完step1,流程应该会继续到step2step3等等……

再次澄清一下,我可以将 spring-batch 从先前执行的步骤再次告诉 "start execution" 吗?

您可以使用以下方法实现特定的步骤顺序。

<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>

下一个参数将定义下一个将执行的操作。 但是我不确定你是否可以在同一个执行中退后一步。但是 Spring 允许你重新开始一个步骤,如果你使用

allow-start-if-complete

为真。

关于构建工作流程,请查看 http://docs.spring.io/spring-batch/2.2.x/apidocs/org/springframework/batch/core/job/builder/FlowBuilder.SplitBuilder.html

希望对您有所帮助。

虽然我可能不推荐这种行为,但它应该能够实现。您需要做的是配置 step2 以使用正确的退出代码转换到 step1,并且 step1 需要能够重新运行。

配置

<step id="step1" next="step2">
    <tasklet ref="someTasklet" allow-start-if-complete="true"/>
</step>
<step id="step2">
    <tasklet ref="someOtherTasklet"/>
    <listeners>
        <listener ref="loopingListener"/>
    </listeners>
    <next on="BACK" to="step1"/>
</step>

代码

public class LoopingListener extends StepExecutionListenerSupport {

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        if(shouldLoop) {
            return new ExitStatus("BACK");
        } else {
            return stepExecution.getExitStatus();
        }
    }
}