e.g. i have 3 Steps in Job (similar to Step1):
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1() {
return stepBuilderFactory
.get("step1")
.<String, String> chunk(1)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
How go to Step 2 and 3 even after exception in Step 1? I mean configuration in Java.
Here is an example on how to configure it when creating a flow. That should be similar to configure it directly with the job builder:
return new FlowBuilder<SimpleFlow>("name")
.start(step1) //
.next(step2).on(ExitStatus.FAILED.getExitCode()).to(errorStep)
.from(step2).on(ALL_PATTERN).to(step3)
.build();
You can use Skip Listener
@Component
public class CustomSkipListener {
@OnSkipInRead
public void onSkipInRead(Throwable t) {
System.out.println("From onSkipInRead -> " + t.getMessage());
}
@OnSkipInWrite
public void onSkipInWrite(String item, Throwable t) {
System.out.println("From onSkipInWrite: " + item + " -> " + t.getMessage());
}
@OnSkipInProcess
public void onSkipInProcess(String item, Throwable t) {
System.out.println("From onSkipInProcess: " + string + " -> " + t.getMessage());
}
}
Then in your step
@Bean
public Step step1(CustomSkipListener customSkipListener) {
return stepBuilderFactory
.get("step1")
.<String, String> chunk(1)
.reader(reader())
.processor(processor())
.writer(writer())
.faultTolerant()
.skipLimit(10)
.skip(RuntimeException.class)
.listener(customSkipListener)
.build();
}
Notice the CHAIN starting from
.faultTolerant()
. Adding the listener is not mandatory. If you add thelistener
you can handle the behaviour when skipping happens.
Some helpful links
http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/SkipListener.html
http://docs.spring.io/spring-batch/reference/html/configureStep.html#configuringSkip
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