失败步骤的Spring批处理作业退出状态

时间:2015-09-12 08:46:51

标签: java spring spring-batch upgrade

我最近使用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

3 个答案:

答案 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;
    }

    }

}