springboot接口重试

2021-10-22  本文已影响0人  指尖架构141319

1.引包

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

2.启动类加注解@EnableRetry

@SpringBootApplication
@EnableRetry
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

3.方法上加重试语法

    @Retryable(value = Exception.class,maxAttempts = 3,backoff = @Backoff(delay = 100,multiplier = 1))
    public void testRetry(){
        System.out.println("test1111");
        int a = 1/0;
    }

参数说明:
value:值表示当哪些异常的时候触发重试
maxAttempts:表示最大重试次数默认为3
delay:表示重试的延迟时间,multiplier表示上一次延时时间是这一次的倍数

控制台日志:

test1111
test1111
test1111
2021-10-22 18:15:18,746:INFO http-nio-8098-exec-2 (AccessAopConfiguration.java:177) - 
【TraceID:eb2b7aeb-05fa-498b-9206-ccf3345e0b03】
【接口耗时:255ms】
【Response:/ by zero 】

2021-10-22 18:15:18,757:ERROR http-nio-8098-exec-2 (ExceptionHandlerBean.java:158) - ExceptionHandlerBean-无法匹配捕获的异常信息,/ by zero
java.lang.ArithmeticException: / by zero

4.注意:

可以看出,异常在三次日志后才抛出,重试生效

@Retryable注解使用需要注意:的地方:
1.由于是基于AOP实现,所以不支持类里自调用方法
2.如果重试失败需要给@Recover注解的方法做后续处理,那这个重试的方法不能有返回值,只能是void
3.方法内不能使用try catch,只能往外抛异常

上一篇 下一篇

猜你喜欢

热点阅读