Spring批处理Java配置:跳过步骤,例外并转到下一步
问题描述:
我有3个步骤的工作(类似步骤1):Spring批处理Java配置:跳过步骤,例外并转到下一步
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1() {
return stepBuilderFactory
.get("step1")
.<String, String> chunk(1)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
如何走,即使在第1步异常后,执行步骤2和3?我的意思是用Java配置。
答
这里是如何创建一个流程时,它配置的例子。这应该类似于使用作业生成器直接配置它:
return new FlowBuilder<SimpleFlow>("name")
.start(step1) //
.next(step2).on(ExitStatus.FAILED.getExitCode()).to(errorStep)
.from(step2).on(ALL_PATTERN).to(step3)
.build();
+0
在我的情况下,独立或一个例外(在步骤2),我需要总是进行第3步。 我将使用类似于: - 从步骤2到失败步骤3 - 从步骤2开始*到步骤3 – Artur
答
您可以使用StepBuilder.faultTolerant方法并以此方式配置xml。
<batch:skippable-exception-classes>
<batch:include class="MyException"/>
</batch:skippable-exception-classes>
这会帮助你的情况。
答
你可以在你的脚步
@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()
开始使用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()); } }
然后。添加侦听器不是必需的。如果添加
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