这是我参与11月更文挑战的第8天,活动详情查看:11月更文挑战
1 Spring-Retry的使用
1 Spring-Retry的简介
在日常的一些场景中, 很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,非常简单好用.
2 Spring中的应用
1 导入maven坐标
1 | xml复制代码 <dependency> |
2 添加被调用类
1 | java复制代码@Slf4j |
3 添加测试类
1 | java复制代码@Slf4j |
从代码的书写注解可以看到,RetryTemplate对象是Spring-Retry框架的重试执行者, 由它添加重试策略,回退操作策略等(注释第五步).RetryTemplate执行重试方法(注释第六步),通过execute方法, 传入的参数是重试回调逻辑对象RetryCallback 和执行操作结束的恢复对象RecoveryCallback. 且可以切换添加的异常种类, 得知,只有添加过相应的异常,才会触发重试操作,否则直接调用RecoveryCallback对象方法.
RetryTemplate的部分源码:
1 | java复制代码 /** |
RetryTemplate添加重试策略源码:
1 | java复制代码 /** |
RetryPolicy接口的实现类:
1 | java复制代码AlwaysRetryPolicy:允许无限重试,直到成功,可能会导致死循环 |
RetryTemplate添加回退策略源码:
1 | java复制代码 /** |
BackOffPolicy的实现类:
1 | java复制代码ExponentialBackOffPolicy:指数退避策略,需设置参数sleeper、initialInterval、maxInterval和multiplier,initialInterval指定初始休眠时间,默认100毫秒,maxInterval指定最大休眠时间,默认30秒,multiplier指定乘数,即下一次休眠时间为当前休眠时间*multiplier |
3 SpringBoot中的应用
1 导入maven坐标
1 | java复制代码 <dependency> |
2 添加一个管理类
1 | java复制代码@Service |
3 启动类上添加注解@EnableRetry
1 | java复制代码@SpringBootApplication |
4 添加测试类
1 | java复制代码@RunWith(SpringRunner.class) |
注解说明:
@Enableretry注解,启用重试功能(默认是否基于子类代理,默认是否, 即是基于Java接口代理)
1 | java复制代码@Target(ElementType.TYPE) |
@Retryable注解, 标记的方法发生异常时会重试
- value 指定发生的异常进行重试
- include 与value一样,默认为空,当exclude同时为空时,所有异常都重试
- exclude 指定异常不重试,默认为空,当include同时为空,所有异常都重试
- maxAttemps 重试次数,默认3
- backoff 重试补充机制 默认是@Backoff()注解
1 | java复制代码@Target({ ElementType.METHOD, ElementType.TYPE }) |
@Backoff注解
- delay 延迟多久后重试
- multiplier 延迟的倍数
1 | java复制代码@Target(ElementType.TYPE) |
@Recover注解
- 当重试达到规定的次数后,被注解标记的方法将被调用, 可以在此方法中进行日志的记录等操作.(该方法的入参类型,返回值类型需要和重试方法保持一致)
1 | java复制代码@Target({ ElementType.METHOD, ElementType.TYPE }) |
参考资料:
本文转载自: 掘金