SpringBoot重试机制
spring-retry是SpringFramework中的一个模块,使用它可以向代码添加重试逻辑。在spring-retry中,所有配置都是基于简单注释的,在方法上添加@Retryable
即可。
引入依赖
1 | <dependency> |
开启
只有启用@EnabelRetry才行,写在配置类、启动类或services上都可以。
1 | import org.springframework.context.annotation.Configuration; |
使用
1 |
|
@Retryable参数
参数 | 描述 |
---|---|
value | 指定重试的异常,默认为空。include的同义词,如果excludes也为空,则重试所有异常 |
include | 指定重试的异常,默认为空 |
exclude | 指定不重试的异常,默认为空 |
maxAttempts | 最大重试次数,默认3次 |
backoff | 重试等待策略,默认使用@Backoff |
@Backoff参数
参数 | 描述 |
---|---|
value | 重试间隔时间,单位毫秒,默认1000 |
multiplier | 重试间隔时间倍数,默认为0。若value为2,multiplier为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒 |
回调
当重试耗尽后,可以使用@Recover注解,使RetryOperations传递给一个回调方法,即RecoveryCallback。用于@Retryable重试失败后的处理方法。如果不需要回调方法,可以不写回调方法。
1 |
|
注意
- 重试耗尽后,如果还没成功符合业务判断,则抛出异常。
- 回调方法与重试方法需写在同一个实现类里。
- 回调方法的返回值必须与重试方法一致。
- 回调方法的第一个参数,必须是Throwable类型。
- 重试方法内不能使用try catch,只能往外抛异常
- 由于spring-retry用到了aspect增强,所以在类里自调用重试方法会失效。