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,只能往外抛异常