springboot 重试,
00-1010介绍@Retryable介绍使用步骤1。引入依赖2。启用@Retryable3。添加@Retryable评论4。测试注意事项和最终结论
00-1010在实际工作中,重试机制是非常常见的场景,比如:发送消息失败、下载网络文件失败等…,因为这些错误可能是网络波动造成的,等待一些延迟后就可以成功处理。我们通常使用try/catch、while loop等。进行相关处理,但是这样看起来臃肿,复杂,不美观。于是就有了spring提供的重试模块—— @Retryable。
目录
spring提供的一个重试机制标注模块,简单标注,提供有效帮助。虽然有一定的局限性,但在大多数情况下,还是能很好的解决我们的问题。——优雅,永不过时。
前言
@Retryable 简介
gradle介绍如下
实现 org . spring framework . retry : spring-retry 33601 . 3 . 3 Maven引入方法
依赖关系groupIdorg.springframework.retry/groupId artifactId spring-重试/artifactId版本1 . 3 . 3/版本/依赖关系
00-1010项目启动类的comment @EnableRetry
@ spring boot application @ EnableRetrypublic class nfljaapplication { public static void main(String[]args){ spring application . run(nfljaapplication . class,args);}}
00-1010创建新的服务方法并添加以下方法
公共接口CodeService { String code()引发异常;}创建一个新的实现类,并将@Retryable注释添加到我们要使用的方法中。
在同一个实现类下添加回调方法@Recover(如果不需要回调方法,可以干脆不写回调方法)。实现效果是,重试次数结束后,如果还是不符合业务判断,就会抛出异常。
@Servicepublic类CodeServiceImpl实现CodeService { @ Override @ retry able(value=exception . class,maxAttempts=3,Back=@ back off (delay=1000,multiplier=1.5))public string code()ThrowsException { system . out . println( start call-);if(0==0){抛出新异常(调用出错!);} System.out.println(成功调用);返回“200”;}/* * *回调方法* * @ return */@ recoverpublicstring recover(exception e){ system . out . println(-)。//日志到数据库返回‘500’;}}
00-1010编写用于测试的测试类
@ Autowired private CodeService CodeService;@Test void test4()抛出异常{ String code=codeservice . code();System.out.println(代码);}测试的打印结果如下,可以证明进行了完美的重试。
开始调用-开始调用-开始调用-开始调用-开始调用-回调方法执行
00-1010 1.@可重试注释参数
值:只有当我们抛出指定的异常时,我们才会重试。include:和value一样,默认为空。当exclude也为空时,默认情况下排除所有异常。排除:指定将不被处理的异常。maxAttempts:最大重试次数,默认为3次,包括第一次请求。退避:重试等待策略,默认使用@Backoff,@Backoff的默认值是1000Lmultiplier(指定的延迟倍数)。默认值为0,表示固定暂停1秒,然后重试。如果乘数设置为1.5,第一次重试将为2秒,第二次为3秒,第三次为4.5秒。2.@恢复评论
方法的返回值必须与@Retryable方法一致。方法的第一个参数必须是Throwable类型,建议与@Retryable配置的异常一致。其他参数,哪个参数是需要的,都可以写进去,回调方法和重试方法写在同一个实现类里。
00-1010基于aop,所以不支持类内自调用方法,需要引入AOP依赖。
实现 org . Spring framework . Boot 3360 Spring-Boot-Starter-AOP 33602 . 6 . 3 如果重试失败,需要跟进@Recover注释的方法,那么这个重试方法不能有返回值,只有try catch不能用在void方法中。只能抛出exception @Recover注释来打开重试失败后调用的方法(注意需要和重新处理方法在同一个类中)。该注释的方法参数必须是@Retryable抛出的异常,否则无法识别,可以在该方法中进行日志处理。
00-1010虽然这个注释的使用有一定的局限性,但还是可以很大程度上解决我们的需求,不需要在代码中写臃肿的重试方法。此时此刻,只需要一个注解就可以优雅地解决我们的问题。
关于springboot集成@Retryable示例代码实现重试功能的这篇文章到此为止。有关springboot @Retryable retry的更多信息,请搜索Popular IT之前的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。