目录
- 前言
- 1.@Retryable是什么
- 2.使用步骤
- (1) POM依赖
- (2)启用@Retryable
- (3)在方法上添加@Retryable
- (4)@Recover
- (5)注意事项
- 3.总结
前言
在实际工作中,重处理是一个非常常见的场景,比如:
这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。
1.@Retryable是什么
spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。
2.使用步骤
(1) POM依赖
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
(2)启用@Retryable
@EnableRetry
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
(3)在方法上添加@Retryable
import com.mail.elegant.service.TestRetryService;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
import java.time.LocalTime;
@Service
public class TestRetryServiceImpl implements TestRetryService {
@Override
@Retryable(value = Exception.class,maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 1.5))
public int test(int code) throws Exception{
System.out.println("test被调用,时间:"+LocalTime.now());
if (code==0){
throw new Exception("情况不对头!");
}
System.out.println("test被调用,情况对头了!");
return 200;
}
}
来简单解释一*解中几个参数的含义:
- value:抛出指定异常才会重试。
- include:和value一样,默认为空,当exclude也为空时,默认所有异常。
- exclude:指定不处理的异常。
- maxAttempts:最大重试次数,默认3次。
- backoff:重试等待策略,默认使用@Backoff,@Backoff的value默认为1000L,我们设置为2000L;multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。
当重试耗尽时还是失败,会出现什么情况呢
当重试耗尽时,RetryOperations可以将控制传递给另一个回调,即RecoveryCallback。Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。如果不需要回调方法,可以直接不写回调方法,那么实现的效果是,重试次数完了后,如果还是没成功没符合业务判断,就抛出异常。
(4)@Recover
@Recover
public int recover(Exception e, int code){
System.out.println("回调方法执行!!!!");
//记日志到数据库 或者调用其余的方法
return 400;
}
可以看到传参里面写的是 Exception e,这个是作为回调的接头暗号(重试次数用完了,还是失败,我们抛出这个Exception e通知触发这个回调方法)。对于@Recover注解的方法,需要特别注意的是:
- 方法的返回值必须与@Retryable方法一致。
- 方法的第一个参数,必须是Throwable类型的,建议是与@Retryable配置的异常一致,其他的参数,需要哪个参数,写进去就可以了(@Recover方法中有的)。
- 该回调方法与重试方法写在同一个实现类里面。
- 复java面试,获取最新面试题资料。
(5)注意事项
- 由于是基于AOP实现,所以不支持类里自调用方法。
- 如果重试失败需要给@Recover注解的方法做后续处理,那这个重试的方法不能有返回值,只能是void。
- 方法内不能使用try catch,只能往外抛异常。
- @Recover注解来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中),此注解注释的方法参数一定要是@Retryable抛出的异常,否则无法识别,可以在该方法中进行日志处理。
3.总结
本篇主要简单介绍了Springboot中的Retryable的使用,主要的适用场景和注意事项,当需要重试的时候还是很有用的。
相关推荐:
SEO建议:如何通过优化提升网站流量,赢得市场竞争,自媒体网站免费推广平台
seo网站排名优化哪家好,seo网站优化平台 ,ai斗蟋
seo渠道优化是什么,seo渠道推广怎么做 ,ai121333
怎么用AI缩写文章,轻松提高效率的全新方法
ChatGPT的梯子:突破网络壁垒,畅享智能对话的全新体验,ai的音标1001ai的音标
AI撰写大数据解决方案:开启智能数据时代的新篇章,ai头号公敌
AI自动读文:让阅读更轻松、更高效的智能革命,寄ai空
SEO技巧提升网站流量:打造高效网站的关键策略,Ai测脸相
AI网页版本:开启智能时代的新篇章,拼音标调ai
ChatGPT不能加载过去的对话,如何提升你的使用体验?,ai智能衣服
ChatGPT当前不可用?如何应对AI服务中断的挑战,ai文章免费写作app
ChatGPT画布打不开?如何解决这一常见问题?,Ai怎么储存为Ai格式在桌面
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
seo软文用什么论坛,seo软文是什么意思 ,爱字幕的AI变脸不见了
SEO已经成为数字营销的核心,如何利用SEO提升网站流量和转化率,含山网站优化推广
用AI写文章:效率与创意的完美结合
什么是seo网站推广,什么是seo网站推广 ,ai酷男人
SEO首选:如何通过优化网站提升排名和流量,简单的网站优化软件
AI写作免费一键生成下载,助您轻松创作!
SEO优化攻略:如何通过精准策略提升网站排名与流量,aI ow翻译
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
SEO化学物质:如何在化工行业提升搜索引擎排名和品牌曝光,rack ai
SEO与SEM:谁才是提升网站流量的王者?,Ai中字体如何变形立体
AI搜索相似文章怎么做?揭秘高效文章检索的核心技术!,程式ai软件
ChatGPT无法加载?检查您的网络设置并尝试重启Chat,ai写作怎么写作文的
为什么seo对企业重要,seo对企业进行网络营销的价值 ,ai李沁换脸鲍鱼
ChatGPT支付时银行卡被拒绝?教你几招轻松解决问题!,国内ai换图
SEO引擎优化方法-让你的网站流量暴增的实战指南,ai智慧树
什么是seo技术,什么是seo及seo的作用 ,AI倒放仓鼠
智能AI写作生成:如何借助人工智能提升创作效率与质量
AI+写文章:开启智能创作新时代
SEO资讯:最新趋势,提升网站排名,快速突破流量瓶颈,廊坊seo推广咨询服务
seo组建需要什么条件,seo建站的步骤 ,ai肌肉宝宝
SEO外链技巧:提升网站排名的秘密武器,ai视频生日祝福
SEO监控:精准把握网站排名与优化成效的利器,湖南seo排名商家名单
《*采集站:带你领略全球最全*资源的宝藏平台》,seo优化易下拉瞧瞧
ChatGPT怎么突然不能打开了?你需要了解的原因与解决办法,ai写作有什么问题吗怎么解决
SEO而且:打造高效网站流量增长的秘密武器,滨江网站推广营销
seo配置是什么,seo设置是什么 ,ai图标制作教程
SEO和品牌营销:如何通过搜索引擎优化打造品牌影响力,建邺seo软件
SEO代做:让你的企业轻松登顶搜索引擎,快速提升曝光率,seo 提高注册量
SEO精通:让你的内容在搜索引擎中脱颖而出,跨境电商 推广营销
seo营销方法是什么,seo营销模式 ,ai山海
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
从零到一:网站历史的演变与未来趋势,肇庆市国外网站建设平台
seo点击工具,seo排名点击软件推荐 ,ai狂躁
AI缩短短文-提升创作效率,写作新体验,光速写作业ai写作app
GoogleGTP-智能时代的革命性突破,人工智能的新纪元,ai可以降论文ai率吗
AI免费文章解读:智能写作新篇章,小店AI
用AI优化文章,轻松提升内容质量与创作效率