最近有个超时问题经常发生,运营商也无法解决,只能引入重试机制来实现了。本来想自己写个for觉得太low,找到有这么个框架也很简单。
1、添加pom引用
<!--重试框架引入jar包--> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
2、在springboot的启动类上添加启用重试机制的注解。
@EnableRetry
3、在需要重试的方法上添加重试注解。参数就不多做解释了,也比较简单,如果碰到难的在做笔记。
value:要拦截的异常类型 maxAttempts:最大重试次数 delay:延迟多少毫秒后重新执行 multiplier:指定延迟倍数,默认为0,表示固定暂停2秒后进行重试。
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1)) private void test() { log.info("此方法有重试机制"); //模拟出现异常 int a = 1 / 0; }
注意:
1、如果此方法(test)属于A类,那么就不能在A类的其他方法中调用此方法,否则重试机制无效。也就是不能在本类中调用。
2、重试机制,注意幂等性。
3、方法中不能将错误拦截,必须向上层抛出才行。
来源:oschina
链接:https://my.oschina.net/uwith/blog/3158570