Spring Batch Java Config: Skip step when exception and go to next steps

我怕爱的太早我们不能终老 提交于 2019-12-17 21:07:40

问题


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.


回答1:


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();



回答2:


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 the listener 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




回答3:


You can use StepBuilder.faultTolerant method and configuring xml in this fashion.

<batch:skippable-exception-classes>
                    <batch:include class="MyException"/>
</batch:skippable-exception-classes>

This would help in your case.

Please look at this : http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/step/builder/SimpleStepBuilder.html#faultTolerant--



来源:https://stackoverflow.com/questions/39134634/spring-batch-java-config-skip-step-when-exception-and-go-to-next-steps

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!