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
,流程应该会继续到step2
、step3
等等……
再次澄清一下,我可以将 spring-batch 从先前执行的步骤再次告诉 "start execution" 吗?
您可以使用以下方法实现特定的步骤顺序。
<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>
下一个参数将定义下一个将执行的操作。
但是我不确定你是否可以在同一个执行中退后一步。但是 Spring 允许你重新开始一个步骤,如果你使用
allow-start-if-complete
为真。
希望对您有所帮助。
虽然我可能不推荐这种行为,但它应该能够实现。您需要做的是配置 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 批处理作业,假设有 5 个步骤 (step1 --> step2 --> step3 --> step4 --> step5
)。我已经配置了一个 StepExectutionListener
,它监听 2 个事件
beforeStep()
和 afterStep()
所有步骤。
我的问题是,如果我当前在beforeStep()
方法中,要执行的步骤是step2
,我可以让spring-batch execute step1
再次?执行完step1
,流程应该会继续到step2
、step3
等等……
再次澄清一下,我可以将 spring-batch 从先前执行的步骤再次告诉 "start execution" 吗?
您可以使用以下方法实现特定的步骤顺序。
<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>
下一个参数将定义下一个将执行的操作。 但是我不确定你是否可以在同一个执行中退后一步。但是 Spring 允许你重新开始一个步骤,如果你使用
allow-start-if-complete
为真。
希望对您有所帮助。
虽然我可能不推荐这种行为,但它应该能够实现。您需要做的是配置 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();
}
}
}