使用spring-retry实现自动重试和错误异常管理

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/08/30/spring-retry/

经常会遇到一些有很高错误率的情况,比如需要从外部获取数据,而对应的网络条件又很一般,那么常常会出现一些错误和重试的情况,代码可能是这样的

public class Demo {
    public Data featch() {
        int current = 0;
        Data data;
        while (current < MAX_TRY_LIMIT) {
            try {
                data = service.call();
            } catch (Exception ex) {
                index++;
            }
        }
        return data;
    }
}

如果项目代码中这种类似的比较多就有点难管理了,而且上面这段代码只处理了重试的情况,并没有超时控制,错误追溯等等。

spring-retry是专为这种情况而生的,它被spring多个子项目使用,比如batch,integration等。

@Service
class Service {
    @Retryable(RemoteAccessException.class)
    public void service() {
        service.call()
    }
    @Recover
    public void recover(RemoteAccessException e) {
       // ... 错误处理
    }
}

只需要添加注解就行了,默认的重试次数是3次。

当然这是可以配置的,比如如下的配置

@Retryable(maxAttempts=10, backoff=@Backoff(delay=100, maxDelay=500))

制定了重试次数,还有延迟配置。

除了简单的重试控制之外,还有一些状态恢复的功能。

spring-retry项目地址为https://github.com/spring-projects/spring-retry

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/08/30/spring-retry/

发表评论