美文网首页
Spring-Retry

Spring-Retry

作者: 安然在路上 | 来源:发表于2023-05-11 16:55 被阅读0次

参考:
SpringRetry踩坑记录
Spring-Retry机制@Recover及@Retryable可能未生效原因

原理:通过动态代理,拦截注解@Retryable,套上try catch的模板代码 (盲猜的)

使用:

  1. 引入jar包 org.springframework.retry:spring-retry:1.3.1

  2. 启动类或者调用类上加上注解 @EnableRetry
    proxyTargetClass:Boolean类型,用于指明代理方式【true:cglib代理,false:jdk动态代理】默认使用jdk动态代理

  3. 需要重试的方法上加上注解 @Retryable
    示例:
    @Retryable(value = Exception.class,maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 1.5))
    参数解释:

  • recover: 此类中用于恢复的方法的名称
  • value:抛出指定异常才会重试
  • maxAttempts:最大重试次数,默认3次
  • backoff:重试等待策略,
    默认使用@Backoff,@Backoff的value默认为1000L,我们设置为2000; 以毫秒为单位的延迟(默认 1000)
  • multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。

坑:

  1. @EnableRetry 和 @Retryable 不能写在同一个类里,否则重试机制不生效
  2. @Retryable修饰的方法要是 public 的

另外:

  • 方法重试的补偿方法上面必须携带@Recover注解
  • @Recover方法需要和@Retryable方法在同一个类中才能生效
  • 使用@Retryable注解同时 recover 属性不是空,同时方法有注解@Recover,但是补偿方法的参数不是当前异常或者异常的父类,抛出ExhaustedRetryException 异常

相关文章

网友评论

      本文标题:Spring-Retry

      本文链接:https://www.haomeiwen.com/subject/gkvssdtx.html