spring-batch重试机制

spring-batch提供了批处理的异常重试机制,主要有两种。重试和跳过。

1.重试(retry)

在step中可以设置,本step运行的重试机制。主要包括:重试的异常,忽略的异常,重试的次数以及重试的监听



    @StepScope
    @Bean
    public Step userStep() {
        return stepBuilderFactory.get("userStep")
                .chunk(2)
                .reader(userReader)
                .processor(userProcess)
                .writer(userWriter)
                //异常重试
                .faultTolerant()
                .retry(Exception.class)
                .retryLimit(10)
                .listener(demoRetryListener)
                .build();
    }

重试机制中,当数据批处理过程中发生异常时对批处理进行重试,重试的位置为配置的chunk批次当前批次开始的位置。(spring-batch在运行时会记录批处理运行状态及运行位置)。当重试次数超过设置的最大重试次数之后,JOB会失败。

在重试过程中可以通过监听,来监听失败成功的数据,监听器代码见下

package com.flight.neon.batch.demo.job.listener;


import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.RetryListener;
import org.springframework.stereotype.Component;

/**
 * @author 这个码农不太萌
 */
@Component
public class DemoRetryListener implements RetryListener {
    @Override
    public  boolean open(RetryContext retryContext, RetryCallback retryCallback) {
        System.out.println("open");
        return true;
    }

    @Override
    public  void close(RetryContext retryContext, RetryCallback retryCallback, Throwable throwable) {
        System.out.println("close");
    }

    @Override
    public  void onError(RetryContext retryContext, RetryCallback retryCallback, Throwable throwable) {
        System.out.println("onError");
    }
}

2.跳过(skip)

在step中可以设置异常跳过。主要设置参数为跳过的异常,忽略的异常,跳过次数,监听等。当JOB运行时异常发生次数大于设置的跳过数,JOB会失败。

@StepScope
    @Bean
    public Step userStep() {
        return stepBuilderFactory.get("userStep")
                .chunk(2)
                .reader(userReader)
                .processor(userProcess)
                .writer(userWriter)
                //异常跳过
                .faultTolerant()
                .skip(Exception.class)
                .skipLimit(2)
                .listener(demoSkipListener)
                .build();
    }

在skip的监听中可以监听数据为何跳过,是read/process/writer哪个位置出现了异常,代码示例见下

package com.flight.neon.batch.demo.job.listener;

import org.springframework.batch.core.SkipListener;
import org.springframework.stereotype.Component;

/**
 * @author 这个码农不太萌
 */
@Component
public class DemoSkipListener implements SkipListener {
    @Override
    public void onSkipInRead(Throwable throwable) {

    }

    @Override
    public void onSkipInWrite(Object o, Throwable throwable) {

    }

    @Override
    public void onSkipInProcess(Object o, Throwable throwable) {

    }
}

你可能感兴趣的:(spring-batch,spring,batch)