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
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With