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

时间:2015-02-12 11:27:54

标签: java spring spring-batch

我有一个弹簧批处理作业,比方说5步(step1 --> step2 --> step3 --> step4 --> step5)。我已经配置了一个StepExectutionListener,它可以监听2个事件

所有步骤均为

beforeStep()afterStep()

我的问题是,如果我处于当前的beforeStep()方法中,并且要执行的步骤是step2,我可以再次执行弹簧批处理step1吗?执行step1后,流程应继续step2step3等等。

为了再次澄清,我可以告诉spring-batch再次从之前执行的步骤“开始执行”吗?

2 个答案:

答案 0 :(得分:1)

虽然我可能不会推荐这种行为,是的,它应该能够完成。您需要做的是将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();
        }
    }
}

答案 1 :(得分:0)

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

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

下一个参数将定义下一个将执行的参数。 但是我不确定你是否可以退回到同一个执行中。但是,如果使用

,Spring允许您重新启动一个步骤
  

允许 - 开始 - 如果完成

为真。

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

希望这有帮助。