Вы можете использовать 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());
}
}
Затем в шаге
@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();
}
Обратите внимание на ЦЕПЬ начиная с .faultTolerant()
. Добавление слушателя не является обязательным. Если вы добавите listener
, вы сможете справиться с поведением при пропуске.
Некоторые полезные ссылки
http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/SkipListener.html
http://docs.spring.io/spring-batch/reference/html/configureStep.html#configuringSkip
Может быть, вы хотите попробовать 'StepExecutionListener'. Его 'afterStep' полезен при обработке потока шагов. – Minh