【代码优化与重构技巧】使用@Retryable增加重试机制

引用依赖

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

代码实现

  • 启动类加@EnableRetry
  • 对应方法中添加验证重试机制
@Retryable(value = Exception.class,maxAttempts = 10)
public String cloudCallUpload1(String waybillNo, String cloudCallType) {
    Map<String, String> inParamMap = new HashMap<>();
    String result = "";
    inParamMap.put("waybillNo", waybillNo);
    inParamMap.put("cloudCallType", cloudCallType);
    result = stationOpUploadCloudCallFeign.cloudCallUpload(token, inParamMap);
    log.info("cloudCallUpload_result:{},inParam:{}", result, JSON.toJSONString(inParamMap));
    throw new RuntimeException();
}

指定最大尝试次数10次,效果如下:1s重试一次
在这里插入图片描述

注解不生效原因

  • 启动类没有添加@EnableRetry
  • @Retryable使用了aspect切面增强。当出现方法内部调用时,注解会失效。(只要是使用了切面注解,使用到的注解一般都会失效)
    举例:当方法C中使用了Demo类中的A时,而A调用了B。在B处使用了重试的注解,则不会重试。
  • 使用重试机制,在一个方法类调用。此处注解也不会生效。因为没有注入到Spring中。
  @Service
  public class C {
      @Resource
      private Demo demo;
      
       public void D() {
          demo.A();
      }
  }
  
  @Component
  public class Demo {
      public void A() {
          B();
      }
      //这里B不会执行
      @Retryable(Exception.class)
      public void B() {
          throw new RuntimeException("retry...");
      }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值