SpringRetryspring的重试机制——只需注解
1、什么是spring的重试机制:
SpringRetry(spring的自动重试机制),SpringRetry是基于AOP实现的,在应用程序中,由于一些网络等不可预知的问题,我们的程序或者接口会失败,比如调用一个第三方的接口获取数据失败了,这时就需要重试机制,比如延时3S后重试、间隔不断增加重试等。都可以使用SpringRetry来实现。
2、 如何使用SpringRetry
SpringRetry的使用相当简单,只需要导包 注解便可以搞定
①导入SpringRetry依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
②在主启动类或者需要重试的方法所在的类上添加注解@EnableRetry
@EnableRetry
public class Test { ... }
③在所需要重试的方法上加上一下注解
@Retryable(value = Exception.class, maxAttempts = 10, backoff = @Backoff(delay = 200L, multiplier = 1))
private Map<String, Object> postSendRequest(String httpUrl, Map<String, Object> resultMap, String resultStr)
throws Exception {
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.postForObject(httpUrl, resultStr, String.class);
resultMap.put("result", "成功!");
return resultMap;
}
注意:
@Retryable注解参数说明:
- maxAttempts :最大重试次数,默认为3,如果要设置的重试次数为3,可以不写;
- value:抛出指定异常才会重试
- include:和value一样,默认为空,当exclude也为空时,默认所以异常
- exclude:指定不处理的异常
- backoff:重试等待策略,默认使用@Backoff@Backoff的value默认为1000L,我们设置为200L。
@Backoff注解中的参数说明:
- value:隔多少毫秒后重试,默认为1000L;
- delay:和value一样,但是默认为0;
- multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。
④可以同时在同一个类中使用@Recover来处理N次处理后都没有成功后需要处理的事情
可以在指定方法上标记@Recover来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中)
@Recover
当重试到达指定次数时,被注解的方法将被回调,可以在该方法中进行日志处理。需要注意的是发生的异常和入参类型一致时才会回调。
3、示例
@EnableRetry//也可以在主启动类上
public class RecoryTest {
@Retryable(value = {RetryException.class}, // 指定发生的异常进行重试
maxAttempts=3, // 重试次数, 默认即为3
backoff = @Backoff(delay = 2000L, multiplier = 2)) // 每次重试延迟毫秒数 及 延迟倍数
@Async
public void retry() {
log.info("重试");
throw new RetryException("失败");
}
@Recover
public void recover (RetryException e) {
log.error("失败",e.getMessage());
}
}
当重试后还是失败就会回调recover()函数;
注意
1、在使用中,被重试的方法不要捕获异常,但是需要将异常抛出。
2、避免在同类中调用retry()方法,解其实是通过动态代理的方式来实现异步调用的。同理@Transactional、@Async注解也是,同类之间调用不生效
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbhgcg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01