[英]Spring Batch jobBuilderFactory with Flow 'on'
尝试使用基于Java的声明的Spring Batch代替jobBuilderFactory,并使用流程指导条件步骤的执行。 我在“ step2()”的末尾有一个步骤执行侦听器,该侦听器返回一个自定义退出代码,该代码用于选择其后的相应步骤。
我得到的意外行为是,除非我为“ COMPLETED” ExitStatus ExitCode明确定义了开启条件,否则作业状态最终将显示为“ FAILED”。 该代码似乎按预期执行,否则。 案件在下面列出。
我看到这里涉及的类是JobBuilder和FlowBuilder。
问题:
1)为什么案例2A和2B导致作业“失败”?
2)如果可以帮助澄清正在发生的情况,那么以下等价的XML是什么?
// 1. JOB STATUS ends up as COMPLETED
jobBuilderFactory.get("myProcess")
.flow(step1())
.next(step2())
.on(ExitStatus.COMPLETED.getExitCode())
.end()
.on("CUSTOM_EXIT_CODE")
.to(step3())
.end()
.build();
// 2A. JOB STATUS ends up as FAILED
jobBuilderFactory.get("myProcess")
.flow(step1())
.next(step2())
.on("CUSTOM_EXIT_CODE")
.to(step3())
.on(ExitStatus.COMPLETED.getExitCode())
.end()
.end()
.build();
// 2B. JOB STATUS ends up as FAILED
jobBuilderFactory.get("myProcess")
.flow(step1())
.next(step2())
.on("CUSTOM_EXIT_CODE")
.to(step3())
.end()
.build();
默认情况下,所有步骤都将返回ExitStatus.COMPLETED。 如果要返回自定义代码,则您的步骤应显式返回FlowExecutionStatus,例如
return new FlowExecutionStatus("CUSTOM_EXIT_CODE");
如果不匹配,它将进入失败状态。
如果你想XML配置,你可以像这样如图所示这里
<batch:job id="conditionalJob">
<batch:step id="stepOne" next="decision">
<batch:tasklet ref="stepOneTasklet"></batch:tasklet>
</batch:step>
<batch:decision decider="decider" id="decision">
<batch:next on="Step2" to="stepTwo"/>
<batch:next on="Step3" to="stepThree"/>
</batch:decision>
<batch:step id="stepTwo">
<batch:tasklet ref="stepTwoTasklet"></batch:tasklet>
</batch:step>
<batch:step id="stepThree">
<batch:tasklet ref="stepThreeTasklet"></batch:tasklet>
</batch:step>
</batch:job>
我做的另一个配置
<batch:job id="processorJob">
<batch:step id="setUpParams">
<batch:tasklet ref="setUpParamsTasklet"></batch:tasklet>
<batch:next on="*" to="jobFlowDecider"/>
<batch:next on="FAILED" to="jobFailed"/>
</batch:step>
<batch:decision decider="jobExecutionDecider" id="jobFlowDecider">
<batch:next on="PROJECT_NOT_EXIST" to="createProject"/>
<batch:next on="MODEL_NOT_EXIST" to="createModel"/>
<batch:next on="MODEL_EXIST" to="importModel"/>
</batch:decision>
<batch:step id="createProject">
<batch:tasklet ref="createProjectTasklet"></batch:tasklet>
<batch:next on="*" to="createModel"/>
<batch:next on="FAILED" to="jobFailed"/>
</batch:step>
<batch:step id="updateRevision">
<batch:tasklet ref="updateRevisonTasklet"></batch:tasklet>
<batch:end on="COMPLETED"/>
<batch:next on="FAILED" to="jobFailed"/>
</batch:step>
<batch:step id="jobFailed">
<batch:tasklet ref="jobFailedTasklet"></batch:tasklet>
</batch:step>
</batch:job>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.