spring-retry上手

spring-retry上手

丁起男 45 2022-04-22

spring-retry上手

在实际工作中,有一些错误可能是由于网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,而且不是很方便,要写很多代码。这也时就可以使用spring-retry,利用主键在不浸入原有业务逻辑的方式下,实现重试功能

使用

  1. 导入依赖

    		<!-- 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>
    
  2. 在启动类上添加注解@EnableRetry,表示开启retry

  3. 在需要重试的方法添加注解@Retryable,让该方法在抛出异常时进行重试

  4. 如果需要对重试失败进行处理,可以在重试方法的类中的另一个方法上添加注解@Recover

@Retryable

参数含义
value抛出指定异常才会重试
include和value一样,当exclude为空时,默认所有异常
exclude指定不处理的异常
maxAttempts最大重试次数,默认3次
backoff重试等待策略,使用@Backoff

@Backoff

参数含义
value延迟执行的毫秒数,默认1000L
multiplier指定延迟倍数,默认为0,表示固定1秒后进行重试

@Recover

被该注解注释的方法:

  • 返回的返回值必须与重试方法一致
  • 方法的参数,第一个可以多一个Throwable类型的参数,表示重试方法抛出的异常,其他参数需要和重试方法一致
  • 该方法需要和重试方法在同一个实现类里

注意

  • 由于是基于aop实现,所有不支持类里的自调用方法
  • 方法内不能使用try catch,只能抛出异常