SpringBoot接口或方法进行失败重试的实现方式

 更新时间:2024年07月23日 09:25:27   作者:会飞的青蛙~  
为了防止网络抖动,影响我们核心接口或方法的成功率,通常我们会对核心方法进行失败重试,如果我们自己通过for循环实现,会使代码显得比较臃肿,所以本文给大家介绍了SpringBoot接口或方法进行失败重试的实现方式,需要的朋友可以参考下

1. 前言

为了防止网络抖动,影响我们核心接口或方法的成功率,通常我们会对核心方法进行失败重试,如果我们自己通过for循环实现,会使代码显得比较臃肿

2. Springboot提供了比较优雅的实现方式

第一步:pom中引入spring-retry 因为retry是基于aop实现的 所以这里还需要引入spring aop

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

第二步:启动类上开启spiring-retry模块

第三步:在需要失败重试方法上加@Retryable注解

参数

value:可以设置对哪些异常进行失败重试
maxAttempts:设置失败重试的次数
backoff:设置重试等待策略
delay:失败重试时间间隔
multiplier:设置延迟倍数

例如:我们delay设置的是1000 multipler设置的是2当出现异常时,会间隔1秒,2秒,4秒进行重试

第四步:当重试次数耗尽还抛出异常时,我们可以通过@Recover注解进行失败回调

拿到我们的异常值和方法的入参进行额外的处理,

第五步:我们可以看到,重复调用了五次,最后进入了我们的失败调用方法中

注意:

  1. @Recover方法的返回值,必须与@Retryable方法的返回值一致
  2. @Recover方法的第一个参数必须是Throwable类型的
  3. 回调方法与重试方法需要在同一个实现类里面
  4. 如果同一个类有多个回调方法,我们可以通过@Retryable注解的recover属性,指定回调方法名称
  5. spring-retry是基于aop实现的,静态方法会导致aop失效 更多aop的失效场景请看下期

到此这篇关于SpringBoot接口或方法进行失败重试的实现方式的文章就介绍到这了,更多相关SpringBoot接口进行失败重试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中将String类型转换为int类型的几种常见方法

    Java中将String类型转换为int类型的几种常见方法

    在java中经常会遇到需要对数据进行类型转换的场景,这篇文章主要给大家介绍了关于Java中将String类型转换为int类型的几种常见方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Java使用Optional实现优雅避免空指针异常

    Java使用Optional实现优雅避免空指针异常

    空指针异常(NullPointerException)可以说是Java程序员最容易遇到的问题了。为了解决这个问题,Java 8 版本中推出了 Optional 类,本文就来讲讲如何使用Optional实现优雅避免空指针异常吧
    2023-03-03
  • Java ArrayList使用总结

    Java ArrayList使用总结

    这篇文章主要介绍了Java ArrayList使用总结,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • Java RocksDB安装与应用

    Java RocksDB安装与应用

    本篇文章主要给大家介绍了JAVA中RocksDB的安装与应用,有需要到的朋友一起学习参考下。
    2017-12-12
  • springboot打包jar和war包的教程图解

    springboot打包jar和war包的教程图解

    这篇文章主要介绍了springboot打包jar和war包的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Springmvc模式上传和下载与enctype对比

    Springmvc模式上传和下载与enctype对比

    这篇文章主要介绍了Springmvc模式上传和下载与enctype对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java调用windows系统的CMD命令并启动新程序

    Java调用windows系统的CMD命令并启动新程序

    本文教你如何使用java程序调用windows系统的CMD命令启动新程序方法,需要的朋友可以参考下
    2023-05-05
  • springboot集成websocket的四种方式小结

    springboot集成websocket的四种方式小结

    本文主要介绍了springboot集成websocket的四种方式小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java 细致图解带你分析汉诺塔

    Java 细致图解带你分析汉诺塔

    汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。本文将用Java求解这一问题,感兴趣的可以学习一下
    2022-03-03
  • java时间和字符串之间相互转换几种方法

    java时间和字符串之间相互转换几种方法

    这篇文章主要介绍了java时间和字符串之间相互转换的几种方法,还详细解释了DateTimeFormatter的三种解析模式,并比较了yyyy和uuuu在严格模式下的区别,需要的朋友可以参考下
    2025-03-03

最新评论