弹簧批步失败

时间:2015-01-06 06:08:46

标签: spring-batch

如果多步批处理中出现步骤失败,则会在控制台上显示步骤失败消息。 此外,BATCH_STATUSCOMPLETEDEXIT_STATUSFAILED.

问题1如何将EXIT_STATUS更改为COMPLETED

Q.2无论如何可能不在控制台中显示失败消息

示例代码

 <job id="someJob" xmlns="http://www.springframework.org/schema/batch"
     restartable="true" parent="baseJob">
    <step id="aStep">
        <job ref="aJob" />
        <next on="*" to="bStep"/>
    </step>
    <step id="bStep" parent="aStep" next="cStep">
        <job ref="bJob"/>
    </step>
    <step id="cStep" parent="bStep">
        <job ref="cJob"/>
    </step>
</job>

 <job id="aJob" xmlns="http://www.springframework.org/schema/batch"
         restartable="true" parent="baseJob">
    <step id="aJobStep">
        <tasklet ref="aJobTasklet" />
    </step>
</job>

<job id="bJob" xmlns="http://www.springframework.org/schema/batch"
         restartable="true" parent="baseJob">
    <step id="bJobStep">
        <tasklet ref="bJobTasklet" />
    </step>
</job>

<job id="cJob" xmlns="http://www.springframework.org/schema/batch"
         restartable="true" parent="baseJob">
    <step id="cJobStep">
        <tasklet ref="cJobTasklet" />
    </step>
</job>

如果步骤aStep因作业someJob失败(aStep已抛出一些SQLException)。 然后someJob继续执行。但在成功完成cStep后,BATCH_STATUS的{​​{1}}为someJob,但COMPLETED = EXIT_STATUS。 此外,FAILEDBATCH_STATUS其他步骤如下。

EXIT_STATUS

3 个答案:

答案 0 :(得分:3)

Spring Batch有两种状态。第一个是BatchStatus。此状态由一组预定义值组成,框架使用这些值来指示事物的状态。另一个是ExitStatusExitStatus使开发人员能够提供特定于用例的状态消息。

在执行作业时,Spring Batch无法覆盖BatchStatus。这是设计的。但是,允许在许多地方设置ExitStatus(通常是StepExecutionListenerJobExecutionListener等监听器),以便可以解释框架的结果以满足您的使用情况下。

如果您想在ExitStatus通常表示作业或步骤失败时指示成功,则应实施相应的侦听器并相应地设置ExitStatus

答案 1 :(得分:0)

如果您在页面上参考有关配置作业(http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html,第5.3.3节)的Spring Batch的文档,您应该能够看到使用<end>

可以通过

完成
<job ....>
    <step id="step1"...>
        ....
        <end on="FAILED" />
        <next on="*" to="step2" />
    </step>
    <step id="step2" ....>
        ....
    </step>
</job>

通过执行此操作,当step1失败时,作业将以COMPLETED批处理和退出状态结束。

答案 2 :(得分:0)

您可以在xml中添加以下代码:

如果想要在步骤失败时使作业失败 -- 如果要在步骤失败时完成作业 --

如果您想在步骤失败时在日志中打印一条消息,请包括如下异常处理:

            <batch:skippable-exception-classes>
                <batch:include class="java.lang.Exception" />
            </batch:skippable-exception-classes>
            <batch:listeners>
                <batch:listener>
                    <bean  class="java.lang.Exception" scope = "step">
                    </bean>
                </batch:listener>
            </batch:listeners>