SpringBatch从入门到放弃005- 健壮配置之重试

有时候会因为短暂的故障,导致 Batch 执行失败,如网络抖动等,为了 Batch 的健壮性,这个时候就需要重试几次,以排除因为短暂因素造成的 Batch 状态失败。

需要指出的是从 Spring Batch 2.2.0 之后的版本,Retry 已经独立成一个单独的 Jar。

重试的 Batch 设置:

retry()
源码如下:

public FaultTolerantStepBuilder<I, O> retry(Class<? extends Throwable> type) {
        retryableExceptionClasses.put(type, true);
        return this;
    }

定义捕获到需要重试的异常,可以多次调用,每次调用都会将异常加到列表里面。

noRetry()
源码如下:

    public FaultTolerantStepBuilder<I, O> noRetry(Class<? extends Throwable> type) {
        retryableExceptionClasses.put(type, false);
        return this;
    }

每次调用将参数加到需要排除的异常列表里面。

retryLimit()
源码如下:

    public FaultTolerantStepBuilder<I, O> retryLimit(int retryLimit) {
        this.retryLimit = retryLimit;
        return this;
    }

最大可重试次数。操过这个次数就会直接失败。

retryContextCache()
源码如下:

    public FaultTolerantStepBuilder<I, O> retryContextCache(RetryContextCache retryContextCache) {
        this.retryContextCache = retryContextCache;
        return this;
    }

用来存放 RetryContext 的缓存。

retryPolicy()
源码如下:

    public FaultTolerantStepBuilder<I, O> retryPolicy(RetryPolicy retryPolicy) {
        this.retryPolicy = retryPolicy;
        return this;
    }

一些简单的重试,可以通过 retry(),noRetry()和retryLimit() 配置来实现重试。Spring Batch 还支持通过设置RetryPolicy 来实现复杂逻辑的重试。RetryPolicy(重试策略)接口定义如下:

canRetry() 如何判断是否可以重试,open()在重试开始时执行,close()在重试结束是执行,每次重试调用一次registerThrowable()来初始化上下文。

系统默认提供了以下几个实现类:

具体实现类的作用,参见下表:

实现类 作用
NeverRetryPolicy 只允许调用RetryCallback一次,不允许重试
AlwaysRetryPolicy 允许无限重试,直到成功,此方式逻辑不当会导致死循环
SimpleRetryPolicy 固定次数重试策略,默认重试最大次数为3次,RetryTemplate默认使用的策略
TimeoutRetryPolicy 超时时间重试策略,默认超时时间为1秒,在指定的超时时间内允许重试
CircuitBreakerRetryPolicy 有熔断功能的重试策略,需设置3个参数openTimeout、resetTimeout和delegate,
CompositeRetryPolicy 组合重试策略,有两种组合方式,乐观组合重试策略是指只要有一个策略允许重试即可以,悲观组合重试策略是指只要有一个策略不允许重试即可以,但不管哪种组合方式,组合中的每一个策略都会执行
ExceptionClassifierRetryPolicy 为不同的异常指定不同的重试策略

猜你喜欢

转载自www.cnblogs.com/ckp-henu/p/springbatch-cong-ru-men-dao-fang-qi0052.html