Spring Retry(方法重试、方法重新调用)

Spring Retry——方法重试、方法重新调用

    • 简介:
    • 使用
        • 1. 配置
      • 2.使用
    • 总结
    • 注意

简介:

Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况,通过自动重试失败的操作,提供了一种可靠的方式来处理潜在的异常或错误。
除此之外:Spring Retry 是基于 Spring AOP(Aspect-Oriented Programming)实现的

Spring Retry 使用了 Spring AOP的切面(Aspect)来定义重试的逻辑。切面可以在方法调用之前、之后或抛出异常时执行特定的代码。通过在切面中定义重试的逻辑,Spring Retry 可以自动捕获异常并重新尝试方法调用,而不需要在每个方法上编写重试逻辑。

使用

1. 配置

为了启用 Spring Retry 的支持,首先要在pom.xml 文件中添加以下依赖项

     	<dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.3.1</version></dependency>

因为 Spring Retry 是基于AOP实现的所以我们还要引入aop的相关依赖

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

2.使用

1、在pom.xml文件中配置完之后,我们还要再启动类上添加@EnableRetry注解。

@SpringBootApplication
@EnableRetry
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2、@Retryable
在需要重试的方法上加上@Retryable注解,当指定的方法抛出异常之后@Retryable抓取到异常并重新调用该方法

    @Retryablepublic void retry (String s){ //123System.out.println(s);System.out.println("###########");throw new RuntimeException();}

控制台输出:

123
###########
123
###########
123
###########

由于没有指定任何异常,因此将尝试重试所有异常。此外,一旦达到最大尝试次数,但仍有异常,就会抛出 ExhaustedRetryException。

  • interceptor:可以通过该参数,指定方法拦截器的bean名称
  • value:抛出指定异常才会重试
  • include:和value一样,默认为空,当exclude也为空时,默认所以异常
  • exclude:指定不处理的异常
  • maxAttempts:最大重试次数,默认3次
  • backoff:重试等待策略,默认使用@Backoff,@Backoff的value默认为1000L,我们设置为2000L;multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。

3、@Recover
当 @Retryable指定的方法的重试次数用尽之后,程序就会走到 @Recover注解的方法中

   @Retryablepublic void retry (String s){System.out.println(s);System.out.println("###########");throw new RuntimeException();}@Recoverpublic void recover(){System.out.println("======>recover");}

控制台输出:

123
###########
123
###########
123
###########
======>recover

总结

Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况,通过自动重试失败的操作,提供了一种可靠的方式来处理潜在的异常或错误。

Spring Retry 的主要特点包括:

  • 简单易用:通过在方法上添加 @Retryable 注解,可以轻松启用重试机制。同时,还可以使用 @Backoff 注解来配置指数退避策略。
  • 自定义重试逻辑:通过实现 RetryTemplate 接口,可以自定义重试的逻辑,包括重试次数、休眠时间、异常类型等。
  • 支持多种触发条件:Spring Retry 支持多种触发重试的条件,包括抛出异常、返回特定值等。 集成性好:Spring Retry 与 Spring Boot 集成良好,可以方便地与其他 Spring 功能(如监控、日志等)集成。

Spring Retry 相比递归在处理重试逻辑方面有以下优点:

  • 简单易用:Spring Retry 提供了一种声明式的方式来处理重试逻辑,只需要在方法上添加相应的注解即可。相比之下,递归需要手动编写循环和条件判断,代码相对复杂且容易出错。
  • 可配置性强:Spring Retry 提供了丰富的配置选项,例如重试次数、休眠时间、异常类型等,可以根据实际需求进行灵活配置。而递归的重试机制通常需要手动编写逻辑,难以实现灵活的配置。
  • 资源利用率高:Spring Retry 在重试之间会根据配置进行休眠,避免了无休止的递归调用造成的栈溢出问题。同时,Spring Retry 使用了循环重试机制,每次重试都会重新计算下一次重试的时间,避免了资源的浪费。
  • 扩展性强:Spring Retry 提供了事件通知和自定义策略等扩展点,可以根据实际需求进行定制和扩展。而递归的方式通常难以实现这些高级功能。

注意

在使用过程中,发现当异常被try捕捉到之后将不会触发@Retryable 重试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql大数据量下流式查询优化:Jdbc中的useFetchSize参数及其原理解析

前言 最近我朋友公司有个需求场景&#xff1a;查询千万级数据量并写入txt文件的程序优化需求。 朋友找到我对程序进行优化&#xff0c; 不然饭碗不保......&#x1f4a6; 下面就分享一下解决这个优化问题的过程和思路&#xff0c;并总结一下&#xff0c;在以后不要在踩同样的坑…

加油吧! 学习无线电!

pyhackrf2 已经修复 pyhackrf2 修改bw问题-CSDN博客 OOK 已经写出来了 ook 模块 基础测试完成 准备调整参数-CSDN博客 最先后一个程序 关于 wfm解码

C++指南——拷贝构造函数和赋值运算符重载

文章目录 1 举个例子&#xff08;问题由来&#xff09;2 拷贝构造函数与构造函数不同3 默认拷贝构造函数是浅拷贝4 默认赋值运算符是浅拷贝 1 举个例子&#xff08;问题由来&#xff09; 在C中&#xff0c;使用Car car2 car1; 这种形式的语句被称为拷贝构造&#xff08;用一个…

[算法]使用aes进行数据加密

一、需求 有一段信息需要进行安全加密。 二、方案 对称加密和非对称加密两种方案&#xff0c;其中由于公钥密钥的管理还未形成规范&#xff0c;因此考虑使用对称加密。其中&#xff0c;对称加密算法使用openssl中&#xff0c;关于aes的部分&#xff0c;输出结果为128位数据。…

【青书学堂】 2023年第二学期 刑法学(总论)(直播课) 作业

【青书学堂】 2023年第二学期 刑法学(总论)(直播课) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xff…

自然语言处理中的语言模型

知乎好文章&#xff0c;建议参考学习语言模型 语言模型&#xff08;Language Model, LM&#xff09;是用于计算或预测一系列词语&#xff08;句子或文本段落&#xff09;出现概率的统计模型。它们能够基于已知的词序列来预测下一个词或者评估一个句子的语言学合理性。 发展历程…

【代码学习】einops,更简单的张量变化

官方教程&#xff1a;https://github.com/arogozhnikov/einops/blob/master/docs/2-einops-for-deep-learning.ipynb 常见操作&#xff1a; 维度变换 rearrange 维度变换 y rearrange(x, b c h w -> b h w c) # 已经 表明 x的每个轴 变量 b c h w guess(y.shape)flatten…

oracle-undo

tips&#xff1a;串行化隔离级别&#xff1a;事务开始后&#xff0c;对一张表不会被别人影响&#xff0c;对于审计工作比较有用&#xff0c;避免了幻读。 undo表空间&#xff1a;自动生成段&#xff0c;自动生成区&#xff0c;自动维护的&#xff0c;不像一般的表空间&#xff…

独立式键盘控制的4级变速流水灯

#include<reg51.h> // 包含51单片机寄存器定义的头文件 unsigned char speed; //储存流水灯的流动速度 sbit S1P1^4; //位定义S1为P1.4 sbit S2P1^5; //位定义S2为P1.5 sbit S3P1^6; //位定义S3为P1.6 sbit S4P1^7; //位…

泽攸科技完全自主研制的电子束光刻机取得阶段性成果

国产电子束光刻机实现自主可控&#xff0c;是实现我国集成电路产业链自主可控的重要一环。近日&#xff0c;泽攸科技联合松山湖材料实验室开展的全自主电子束光刻机整机的开发与产业化项目取得重大进展&#xff0c;成功研制出电子束光刻系统&#xff0c;实现了电子束光刻机整机…

rime中州韵小狼毫 生字注音滤镜 汉字注音滤镜

在中文环境下&#xff0c;多音字是比较常见的现象。对于一些不常见的生僻字&#xff0c;或者一些用于地名&#xff0c;人名中的常见字的冷门读音&#xff0c;如果不能正确的阅读&#xff0c;例如把 荥阳 读成了 miāo yng&#xff0c;则会怡笑大方。 今天我们在rime中州韵小狼…

python自动化运维管理拓扑

目录 1、简介 2、实验环境 3、拓扑图 4、需求及其代码 4.1、测试连通性 4.2、远程登陆 4.3、配置loopback 4.4、监控内存使用率 4.5、自动化巡检内存使用率 4.6、自动化配置snmp服务 4.7、提取分析字符串 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业…

2024 年 20+ 个 Node.js 开发工具

2024了&#xff0c;你准备好提升你的Node.js开发体验了吗&#xff1f;有了合适的工具集&#xff0c;你可以将你的项目提升到新的高度&#xff0c;简化你的工作流程&#xff0c;创建强大的、高性能的应用程序。这篇全面的指南将向你介绍Node.js开发的顶级工具&#xff0c;提供使…

网络流量分析与故障分析

1.网络流量实时分析 网络监控 也snmp协议 交换机和服务器打开 snmp就ok了 MRTG或者是prgt 用于对网络流量进行实时监测&#xff0c;可以及时了解服务器和交换机的流量&#xff0c;防止因流量过大而导致服务器瘫痪或网络拥塞。 原理 通过snmp监控 是一个…

外汇网站主要业务逻辑梳理

上图为工行ICBC的外汇保证金交易界面。 当需要买入帐户欧元&#xff08;欧元人民币&#xff09;时&#xff0c;买入100欧元&#xff0c;因为没有杠杆&#xff0c;虽然欧元中间价是782.34&#xff0c;但实际需要支付783.14元人民币的保证金&#xff0c;这个兑换不是真实的外汇兑…

2.8 EXERCISES

如果我们想使用每个线程来计算向量加法的一个输出元素&#xff0c;那么将线程/块索引映射到数据索引的表达式是什么&#xff1f; 答&#xff1a;C 假设我们想用每个线程来计算向量加法的两个&#xff08;相邻&#xff09;元素。将线程/块索引映射到i&#xff08;由线程处理的…

[MySQL] 数据库的主从复制和读写分离

一、mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。…

React Hooks的useState、useRef使用

React Hooks 是 React 16.8 版本引入的新特性&#xff0c;它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中&#xff0c;useState 和 useRef 是两个常用的 Hooks。 1. useState useState 是一个允许你在函数组件中添加 state 的 Hook。 使用说明&#xf…

Windows11下载安装nacos(2.3.0)详解

一、环境要求 windows7以上 jdk8及以上版本&#xff0c;并且配置了JAVA_HOME环境变量 二、nacos下载解压 release版本地址:Releases alibaba/nacos GitHub 下载后解压即可&#xff0c;上面的tar.gz是linux版本 解压后如下 nacos自己内置有数据库derby&#xff0c;我用的是…

使用 matlab 求解最小二乘问题

有约束线性最小二乘 其标准形式为&#xff1a; min ⁡ x 1 2 ∥ C x − d ∥ 2 2 \mathop {\min }\limits_x \quad \frac{1}{2}\left\| Cx-d \right\|_2^2 xmin​21​∥Cx−d∥22​ 约束条件为&#xff1a; A ⋅ x ≤ b A e q ⋅ x b e q l b ≤ x ≤ u b \begin{aligned} …