Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Batch Step Failure

Tags:

spring-batch

In case of step failure in a multi-step batch , the step fail message is shown on console. Also the BATCH_STATUS is COMPLETED and EXIT_STATUS is FAILED.

Q.1 How to change the EXIT_STATUS to COMPLETED?

Q.2 Is it anyway possible not to show failure message in console

Sample Code

 <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>

if Step aStep fails for job someJob (aStep has thrown some SQLException). Then someJob is continued to execute. But after successful completion of cStep, BATCH_STATUS for someJob is COMPLETED but EXIT_STATUS = FAILED. Also BATCH_STATUS and EXIT_STATUS of other steps are as follows.

Step Name BATCH_STATUS  EXIT_STATUS
aStep     FAILED        FAILED
bStep     COMPLETED     COMPLETED
cStep     COMPLETED     COMPLETED
like image 681
Sanjib Kumar Koley Avatar asked Apr 26 '26 23:04

Sanjib Kumar Koley


2 Answers

There are two statuses in Spring Batch. The first is the BatchStatus. This status consists of a set of pre-defined values that are used by the framework to indicate the state of things. The other is the ExitStatus. The ExitStatus provides the ability for a developer to provide use case specific status messages.

In the execution of a job, there is no way Spring Batch allows you to override the BatchStatus. This is by design. However, the ExitStatus is allowed to be set in a number of places (typically listeners like the StepExecutionListener and the JobExecutionListener) so that the results from the framework can be interpreted to meet your use case.

If you want to indicate success when the ExitStatus typically says that the job or step has failed, you would implement the appropriate listener and set the ExitStatus accordingly.

like image 116
Michael Minella Avatar answered Apr 30 '26 07:04

Michael Minella


If you refer to Spring Batch's document on the page about configuring the job (http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html , section 5.3.3, you should be able to see the use of <end>

It can be done by

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

By doing so, when step1 failed, the job will end with COMPLETED Batch and Exit status.

like image 30
Adrian Shum Avatar answered Apr 30 '26 07:04

Adrian Shum



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!