Java Spring批处理-执行一步后退或重新执行以前执行的步骤
我有一个spring批处理作业,比如说5个步骤(Java Spring批处理-执行一步后退或重新执行以前执行的步骤,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个spring批处理作业,比如说5个步骤(step1-->step2-->step3-->step4-->step5)。我已经配置了一个StepExecutionListener,它监听2个事件 beforstep()和afterStep()用于所有步骤 我的问题是,如果我当前使用的是beforeStep()方法,并且要执行的步骤是step2,我可以让spring批处理再次执行step1?执行step1后,流程应继续执行step2、step3等 为了再次澄清,我可以告诉spring bat
step1-->step2-->step3-->step4-->step5
)。我已经配置了一个StepExecutionListener
,它监听2个事件
beforstep()
和afterStep()
用于所有步骤
我的问题是,如果我当前使用的是beforeStep()
方法,并且要执行的步骤是step2
,我可以让spring批处理再次执行step1
?执行step1
后,流程应继续执行step2
、step3
等
为了再次澄清,我可以告诉spring batch再次从先前执行的步骤“开始执行”吗?您可以使用以下方法实现步骤的特定顺序
<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>
(...)
下一个参数将定义下一个要执行的。
然而,我不确定你是否能在同样的执行中后退一步。但是Spring允许您在使用
完成后允许启动
这是真的
另外,对于构建工作流,请参见
希望这能有所帮助。虽然我可能不会推荐这种行为,但是的,它应该能够实现。您需要做的是将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();
}
}
}
谢谢你的回答。。我想要实现的是在当前作业执行过程中后退一步。。。使用Spring批处理API有可能吗?根据我的经验,我看到的唯一选择是使用条件流,如。我想我明白你的意思了。我也要试试。。谢谢你。谢谢你@Michael Minella的回答。看起来是个好办法。让我试试这个…@Michael Minella,如果我们有可重启的步骤,如何实现同样的效果