我最近使用Spring Batch 2.2.0 to 3.0.5
升级了旧应用程序。我对数据库表进行了必要的更改,并对参数API进行了一些微小的代码更改。
现在,当我运行应用程序时,它正在运行,但如果步骤的退出状态为FAILED,则作业的存在状态将设置为COMPLETED。这导致了问题,因为我们的应用程序代码将此视为成功执行。我通过在afterJob()
中添加代码片段来解决这个问题,我在其中检查stepExecution
列表并手动设置作业退出状态,但Spring Batch框架不应该处理退出状态?
升级时有什么遗漏的吗?
参考:http://docs.spring.io/spring-batch/reference/html/configureJob.html
答案 0 :(得分:2)
您可以在<fail>
中使用<job>
转换元素来指示Job停止使用BatchStatus和失败的ExisStatus。
<step id="step2" parent="s2">
<fail on="FAILED" />
<next on="*" to="step3"/>
</step>
答案 1 :(得分:0)
如果您使用的是基于Java的配置,则可以将.on(ExitStatus.FAILED.getExitCode()).fail()
添加到应该导致作业退出状态为FAILED
的步骤中:
jobBuilderFactory.get("jobName")
.start(firstStep())
.next(secondStep()).on(ExitStatus.FAILED.getExitCode()).fail()
.next(thirdStep())
.end()
.build()
答案 2 :(得分:0)
您可以在该作业上使用Decider,并且该决策者将调用这样的类:
public class JobDecider implements JobExecutionDecider {
/* @Autowired
private JobOperator jobOperator;*/
@Override
public FlowExecutionStatus decide(JobExecution arg0, StepExecution stepExecution) {
JobParameters jp = arg0.getJobParameters();
if(!stepExecution.getExitStatus().getExitCode().equals("COMPLETED"))
{
return FlowExecutionStatus.FAILED;
}
else
{
//System.out.println("*******Job Decider ******* With Passed State ");
return FlowExecutionStatus.COMPLETED;
}
}
}