弹簧批量步骤重启

时间:2016-08-24 14:55:17

标签: spring spring-batch

我有一个要求,我在弹簧批处理作业中有多个步骤,如果一步失败,我仍然应该继续下一步。但失败的步骤应该是可重启的。

<batch:job id="myJob" restartable="true">
    <batch:step id="step1" allow-start-if-complete="false">
        <batch:tasklet ref="tasklet1" start-limit="1">
        </batch:tasklet>
        <batch:next on="*" to="step2"/>
    </batch:step>
    <batch:step id="step2">
        <batch:tasklet ref="tasklet2" allow-start-if-complete="true">
        </batch:tasklet>
        <batch:next on="*" to="step3"/>
    </batch:step>
    <batch:step id="step3">
        <batch:tasklet ref="tasklet3" allow-start-if-complete="true">
        </batch:tasklet>
        <batch:next on="*" to="step4"/>
    </batch:step>
    <batch:step id="step4">
        <batch:tasklet ref="tasklet4" allow-start-if-complete="true">
        </batch:tasklet>
    </batch:step>
    <batch:listeners>
        <batch:listener ref="myListener" />
    </batch:listeners>
</batch:job>

我已将Tasklet3的异常添加到测试目的。

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
    logger.info("Tasklet4 is running");
    throw new Exception("Some error");
}

我对此有很多疑问。

  1. 如果在步骤3中添加,我无法获得失败的工作状态 我希望下一步要执行,但是作业应该无法重新启动它。
  2. 只是为了重新启动批处理作业,我将step3配置更改为 然后批处理作业失败,并且不执行步骤4。 但 允许 - 开始 - 如果完成=&#34;假&#34;或start-limit =&#34; 1&#34;不工作,如果我重新启动作业step1仍然执行。我希望step1不要在重新启动时执行。
  3. 我的目标是步骤应该继续下一步失败,我应该能够重新启动作业(作业应该失败),并且在重新启动执行期间不应该执行上面的一些步骤(步骤1)。

    请帮忙。

0 个答案:

没有答案