问题在于:我有一个具有多个步骤的Spring Batch作业。基于第一步,我必须决定接下来的步骤。我可以根据作业参数在 STEP1-passTasklet 中设置状态,以便我可以将退出状态设置为自定义状态,并在作业定义文件中定义它以进入下一步。
Example
<job id="conditionalStepLogicJob">
<step id="step1">
<tasklet ref="passTasklet"/>
<next on="BABY" to="step2a"/>
<stop on="KID" to="step2b"/>
<next on="*" to="step3"/>
</step>
<step id="step2b">
<tasklet ref="kidTasklet"/>
</step>
<step id="step2a">
<tasklet ref="babyTasklet"/>
</step>
<step id="step3">
<tasklet ref="babykidTasklet"/>
</step>
</job>
我理想地希望在步骤之间使用我自己的EXIT STATUS。我能这样做吗?它不会破坏任何OOTB流量吗?是否有效
答案 0 :(得分:10)
他们有几种方法可以做到这一点。
您可以使用StepExecutionListener
并覆盖afterStep
方法:
@AfterStep
public ExitStatus afterStep(){
//Test condition
return new ExistStatus("CUSTOM EXIT STATUS");
}
或者使用JobExecutionDecider
根据结果选择下一步。
public class CustomDecider implements JobExecutionDecider {
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
if (/* your conditon */) {
return new FlowExecutionStatus("OK");
}
return new FlowExecutionStatus("OTHER CODE HERE");
}
}
Xml config:
<decision id="decider" decider="decider">
<next on="OK" to="step1" />
<next on="OHTER CODE HERE" to="step2" />
</decision>
<bean id="decider" class="com.xxx.CustomDecider"/>