spring-retry上手
在实际工作中,有一些错误可能是由于网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,而且不是很方便,要写很多代码。这也时就可以使用spring-retry,利用主键在不浸入原有业务逻辑的方式下,实现重试功能
使用
-
导入依赖
<!-- spring-retry --> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> <!-- spring-retry 依赖与aop--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
-
在启动类上添加注解
@EnableRetry
,表示开启retry -
在需要重试的方法添加注解
@Retryable
,让该方法在抛出异常时进行重试 -
如果需要对重试失败进行处理,可以在重试方法的类中的另一个方法上添加注解
@Recover
@Retryable
参数 | 含义 |
---|---|
value | 抛出指定异常才会重试 |
include | 和value一样,当exclude为空时,默认所有异常 |
exclude | 指定不处理的异常 |
maxAttempts | 最大重试次数,默认3次 |
backoff | 重试等待策略,使用@Backoff |
@Backoff
参数 | 含义 |
---|---|
value | 延迟执行的毫秒数,默认1000L |
multiplier | 指定延迟倍数,默认为0,表示固定1秒后进行重试 |
@Recover
被该注解注释的方法:
- 返回的返回值必须与重试方法一致
- 方法的参数,第一个可以多一个Throwable类型的参数,表示重试方法抛出的异常,其他参数需要和重试方法一致
- 该方法需要和重试方法在同一个实现类里
注意
- 由于是基于aop实现,所有不支持类里的自调用方法
- 方法内不能使用try catch,只能抛出异常