SpringBoot如何优雅的实现重试功能

 更新时间:2023年06月14日 11:17:02   作者:努力的蚂蚁【你若】  
这篇文章主要详细介绍了SpringBoot如何优雅的实现重试功能的步骤详解,文中有详细的代码示例,具有一定的参考价值,感兴趣的同学可以借鉴阅读

使用背景

在有些特定场景,如和第三方对接。
我们调用接口时需要支持重试功能,第一次调用没成功,我们需要等待x秒后再次调用。
通常会设置重试次数,避免业务。
一般我们会这样写

public ApiResponse<Boolean> test() {
	//模拟调用
	System.out.println("开始调用,第" + num + "次");
	//业务逻辑
	boolean result = false;
	if (result) {
		System.out.println("执行完成!");
	} else if (num >= totalNum) {
		System.out.println("重试结束");
		num = 1;
	} else {
		System.out.println("重试");
		++num;
		test();
	}
	return ApiResponse.ok(true);
}

这样写本身,没什么问题。
但是如果多个接口都需要重试的话,代码就不优雅了。

spring-retry介绍

spring系列的spring-retry是另一个实用程序模块,
可以帮助我们以标准方式处理任何特定操作的重试。
在spring-retry中,所有配置都是基于简单注释的。

快速使用

加入依赖

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

开启Retry

启动上增加注解@EnableRetry

@EnableRetry

使用

@GetMapping("test")
@Retryable(value = Exception.class,maxAttempts = 5,backoff = @Backoff(delay = 2000,multiplier = 1.5))
public ApiResponse<Boolean> test() {
	System.out.println("开始调用,第" + num + "次");
	boolean result = false;
	if (!result){
		num++;
		throw new BizException("调用失败,需要重试");
	}
	System.out.println("执行完成");
	return ApiResponse.ok(true);
}

参数

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

到此这篇关于SpringBoot如何优雅的实现重试功能的文章就介绍到这了,更多相关SpringBoot实现重试功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java并发编程死锁定义及如何避免死锁

    java并发编程死锁定义及如何避免死锁

    这篇文章主要为大家介绍了java并发编程中死锁的详细说明及如何避免死锁的方法,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步
    2022-02-02
  • spring异步service中处理线程数限制详解

    spring异步service中处理线程数限制详解

    这篇文章主要给大家介绍了关于spring异步service中处理线程数限制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • SpringBoot数据脱敏的实现示例

    SpringBoot数据脱敏的实现示例

    数据脱敏主要应用在客户安全数据或商业性敏感数据的情况,本文主要介绍了SpringBoot数据脱敏的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Java泛型机制必要性及原理解析

    Java泛型机制必要性及原理解析

    这篇文章主要介绍了Java泛型机制必要性及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 关于JFormDesigner的安装及破姐超详细教程

    关于JFormDesigner的安装及破姐超详细教程

    JFormDesigner是一种先进的图形用户界面Swing 的设计工具(非开源),具有一个独立的开发工具产品和基于不同开发工具如Eclipse、NetBeans等的开发插件,本文给大家介绍JFormDesigner安装破解教程,感兴趣的朋友一起看看吧
    2023-12-12
  • SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)

    SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)

    本文主要介绍了SpringSecurity授权机制的实现,其核心是AccessDecisionManager和投票系统,下面就来介绍一下,感兴趣的可以了解一下
    2025-04-04
  • 使用SpringBoot与EasyExcel实现复杂的导入导出

    使用SpringBoot与EasyExcel实现复杂的导入导出

    这篇文章主要介绍了使用SpringBoot与EasyExcel实现复杂的导入导出,EasyExcel是一个快速解决大文件内存溢出的Excel处理工具,它能让你在不用考虑性能、内存等因素的情况下,快速完成Excel的读、写等功能,需要的朋友可以参考下
    2023-10-10
  • Java聊天室之解决连接超时问题

    Java聊天室之解决连接超时问题

    这篇文章主要为大家详细介绍了Java简易聊天室之解决连接超时问题的方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • 基于Java回顾之JDBC的使用详解

    基于Java回顾之JDBC的使用详解

    本篇文章是对Java中JDBC的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • java堆排序原理与实现方法分析

    java堆排序原理与实现方法分析

    这篇文章主要介绍了java堆排序原理与实现方法,结合实例形式分析了java堆排序的相关原理、实现方法与操作注意事项,需要的朋友可以参考下
    2018-12-12

最新评论