Spring Batch Java Config:exception时跳过步骤并转到下一步
例如我在工作中有3个步骤(类似于步骤1):
@Autowired private StepBuilderFactory stepBuilderFactory; @Bean public Step step1() { return stepBuilderFactory .get("step1") . chunk(1) .reader(reader()) .processor(processor()) .writer(writer()) .build(); }
即使在步骤1中出现exception后,如何进入步骤2和3? 我的意思是用Java配置。
以下是创建流程时如何配置它的示例。 这应该类似于直接使用作业构建器配置它:
return new FlowBuilder("name") .start(step1) // .next(step2).on(ExitStatus.FAILED.getExitCode()).to(errorStep) .from(step2).on(ALL_PATTERN).to(step3) .build();
您可以使用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") . chunk(1) .reader(reader()) .processor(processor()) .writer(writer()) .faultTolerant() .skipLimit(10) .skip(RuntimeException.class) .listener(customSkipListener) .build(); }
注意CHAIN从
.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
您可以使用StepBuilder.faultTolerant方法并以此方式配置xml。
这对你的情况有帮助。
请看这个: http : //docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/step/builder/SimpleStepBuilder.html#faultTolerant–