范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBoot一个注解搞定重试机制,不能太优雅了

  前言
  在实际工作中,重处理是一个非常常见的场景,比如: 发送消息失败。 调用远程服务失败。 争抢锁失败。
  这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用 try/catch  , while  循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。
  然而 spring-retry  却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 一、@Retryable是什么?
  spring系列的 spring-retry  是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在 spring-retry  中,所有配置都是基于简单注释的。
  Spring Boot 基础就不介绍了,推荐下这个实战教程:https://github.com/javastacks/spring-boot-best-practice 二、使用步骤1.POM依赖    org.springframework.retry   spring-retry   2.启用@Retryable@EnableRetry @SpringBootApplication public class HelloApplication {      public static void main(String[] args) {         SpringApplication.run(HelloApplication.class, args);     }  } 3.在方法上添加@Retryableimport 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  注解的方法,需要特别注意的是: ss="nolink">方法的返回值必须与@Retryable方法一致 方法的第一个参数 ,必须是Throwa  ble类型的,建议是与@Retryable配置的异常一致, 其他的参数,需要  哪个参数,写进去就可以了(@Recover方法中有的) 该回调方法与重试方法写在同一个实现类里面 5. 注意事项由于是基于AOP实现,所以不支持类里自调用方法 如果重试失败需要给 @Recover  注解的方法做后续处理,那这个重试的方法不能有返回值,只能是void 方法内不能使用 try catch  ,只能往外抛异常 @Recover  注解来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中),此注解注释的方法参数一定要是 @Retryable  抛出的异常,否则无法识别,可以在该方法中进行日志处理。 总结
  本篇主要简单介绍了Springboot中的 Retryable  的使用,主要的适用场景和注意事项,当需要重试的时候还是很有用的。
  喜欢的小伙伴点个赞支持一下呗!!!!!

人类社会科学技术是把双刃剑育邻梦网友提问人工智能一定能打破人力生产效率递减的僵局吗?回复人类社会科学技术是把双刃剑,它提升了人类社会生产劳动协同效率。但是,它的大规模替代人类劳动计划,正在稀释人类社会的综合未来人类会被机器人取代吗?个人认为不会。而是身体的各部分逐渐被机器替代,变成半机械生化人。首先我们要认同一个事情,科技产品的发展速度是极快的。从莱特兄弟发明第一架飞机,到美国人登上月球,只用了六十多年的时间我国科学家构建合成类胡萝卜素细胞工厂新京报讯(记者周怀宗)随着技术的发展,人类越来越多地开始了解微观世界的运行规律,近日,记者从中国农业科学院获悉,自然通讯在线发表了中国农业科学院深圳农业基因组研究所黄三文团队和美国中国移动中国联通中国电信发布重要公告每经编辑毕陆名2月21日晚间,中国移动中国联通中国电信等通信巨头发布2022年1月份的主要运营数据。中国移动5G套餐客户数4。0127亿户中国移动(00941。HK)公告2022年手机充电到100再拔?原来我们都做错了,正确充电可延长电池寿命相信很多朋友啊都有过这样的感觉,就是以前手机充一次电呢可以用一两天,而现在充一次电的基本用不到半天就没电了,那出现这种情况啊,我们排除电池自然老化的因素,那其实很多时候啊都是由于我远程办公会不会在未来五到十年成为普遍现象?央视网消息为应对新冠肺炎疫情,日本技术企业富士通公司宣布,位于日本的办公空间将缩减一半,同时启动居家工作计划,在日本工作的8万名富士通员工今后将以远程工作方式为主,从而使他们能够根华为官宣!2月27号春季发布会就在今晚华为突然官宣自己春季发布会。华为官方预热将于2月27日晚上9点半举行华为智慧办公春季发布会,全球开启。本次发布会的主题为超级终端,超级创造力。图片中有五颗星球,是否暗示华为东数西算IDC行业专家交流会1各个相关产业链都有上市公司缆通依米康(精密空调)英维克佳力图供电设备中恒电气(高压直流)科华数据(大容量UPS)科士达(UPS)易事特ICT设备华为浪潮长飞亨通光模块企业(中际旭wma格式怎么转换mp3?用格式工厂软件转换一下格式,再试试看!一般电脑播放器兼容性要好一些,车载电脑播放器要弱一些!下面,一起来了解下将wma文件转成手机上支持播放的方法方法一直接更改文件后缀名这种方法虽黑客一般都是怎么获得利益的?举个简单的例子。我成功黑入了你的电脑,获取权限后看到你D盘下面有个文件夹叫做工作,下面有个重要,里面还有个文件夹叫新签合同待归档,里面自然是近期签的重要合同,可能价值几百上千万,或语音转文字的软件有哪些?不用会员的那种?微信上就有语音转文字的功能。专业点的Au等等好多呢我在应用商店翻看了一下,这类软件确实很多。不过,大多数是花样收费的青铜会员,白银会员,黄金会员,钻石会员,至尊豪华会员收费也各种1
真香预警!22。78万元起,创新智慧出行伙伴福特EVOS极智驾临开启预售既想要独特品味表达自我,又想要智能潮流黑科技完爆老式操作,还想要强悍原始性能肆意撒欢?2021年秋季大河车展长安福特展台创新智慧出行伙伴福特EVOS首发亮相福利加码开启预售,22。最新进度!小米机车预计2024年上半年量产小米集团董事长雷军在10月19日的投资者会议上表示,小米造车及团队各项工作的进展都远超它的预期,预计小米电动车将于2024年上半年正式量产。这也是小米第一次对外公开造车项目的进度进科幻电影中的飞行汽车变成现实?随着出行行业的全面转变,汽车企业对于出行的思考已经不仅仅局限于地面了,天空也已经成为越来越多车企们瞄准的方向。飞行汽车,是我们曾经只能在科幻电影中看到的产物,然而今天它却变成了现实富士康造车,能和手机代工一样成功吗?代工巨头富士康在新品发布会特意选择在集团创始人郭台铭71岁生日当天,只见郭台铭驾驶着一辆电动汽车来到现场,伴随着观众的掌声和生日歌的旋律,富士康的三款新车也随之揭晓,分别是纯电SU估值超10亿美元?半导体公司盛合晶微完成3亿美元C轮融资近日,中段硅片制造和三维多芯片集成加工企业盛合晶微半导体有限公司宣布,与系列投资人签署了总额为3亿美元的C轮增资协议,并已实现美元出资到位。参与增资的投资人包括光控华登建信股权建信中质协新能源汽车满意度首次与燃油车持平据报道,中国质量协会在北京发布2021年中国新能源汽车行业用户满意度指数(NEVCACSI)测评结果。2021年燃油车CACSI测评对象为销量较大的186个品牌车型,涉及全国40个晶通半导体获千万元融资,专注于智能氮化镓应用据相关媒体报道,晶通半导体已于近日完成千万级人民币种子轮和种子轮融资,投资方为亚洲最大的独立模拟芯片设计公司矽力杰半导体技术(杭州)有限公司(Silergy)。据悉,本轮融资将主要搭载自研Tensor处理器的GooglePixel6正式发布Google于10月20日发布了最新旗舰智能手机Pixel6系列,其中最吸引注意的就是采用了其自研的Tensor芯片。作为本次发布会唯一的主角,GooglePixel6的硬件配置参北美首款!LucidAir官宣首款电动车搭载激光雷达近日,美国高端豪华电动车品牌LucidGroup宣布将推出Air系列电动轿车,LucidAir将成为北美市场首款搭载激光雷达的量产车型,通过搭载DreamDrive驾驶辅助系统,从荣耀有出了一台P50从去年开始,华为受到外国的影响,遇到了芯片危机,不得不把荣耀卖出去,完全独立出来,从此以后荣耀不在属于华为。事已至此过去了半年多了,大多数的人还不知道荣耀不是华为了,依然觉得荣耀还小米mix4我买定了今天小米发布了小米mix4,我们的雷总又要出来吹牛逼了,闲人让一让,这次的发布会可以说是在一个非常好的时期。MIX系列一直是小米手机黑科技的代名词。从诞生之日起就一直备受关注,虽然