java 重试

@Retryable注解,其中:
value : 指定发生的异常进行重试 
include : 同value , 默认"" , 当exclude也为空时 , 所有异常都重试 
exclude : 排除不重试的异常 , 默认"" , 当include也为空时 , 所有异常都重试
maxAttemps : 尝试次数 , 默认3 . 注意该值包含第一次正常执行的次数 , 即失败之后重新尝试2次 , 一共执行3次
backoff : 重试补偿机制 , 默认无 , 属性配置如下
    delay : 延迟指定时间后(单位毫秒)重试
    multiplier : 指定延迟的倍数 , 每次执行间隔加倍延迟 . 如delay=5000L,multiplier=2 , 第一次重 试为5S后 , 第二次为第一次的10S后 , 第三次为第二次的20S后

@Recover注解,其中:

当重试次数达到限定时 , 会执行@Recover注解的补偿方法 , 只有在入参与发生异常匹配时才会执行该补偿方法,即发生的异常类型需要和@Recover注解的参数一致,@Retryable注解的方法不能有返回值,不然@Recover注解的方法无效

@SpringBootApplication
@EnableRetry//启用重试机制
public class RetryApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(RetryApplication.class, args);
    }
}
 
 
/** 出现指定异常时(RuntimeException) , 再重试3次 , 每次延迟5s , 之后每次延迟翻倍*/
    @Retryable(include = {RuntimeException.class}, maxAttempts = 4, backoff = @Backoff(delay = 2000L, multiplier = 2))
    public void work2() {
        System.out.println("执行方法 : " + LocalDateTime.now());
        throw new RuntimeException();//模拟异常
    }
 
 
  /** 当重试次数达到限定时 , 会执行@Recover注解的补偿方法 , 只有在入参与发生异常匹配时才会执行该补偿方法 */
    @Recover
    public void recover(RuntimeException e) {
        System.out.println("执行补偿方法 : " + LocalDateTime.now());
    }

运行结果:

执行方法:2019-12-31T20:17:48.566

执行方法:2019-12-31T20:17:49.567

执行方法:2019-12-31T20:17:50.568

执行补偿方法:2019-12-31T20:17:50.568

猜你喜欢

转载自blog.csdn.net/qq_36647209/article/details/130030686