当前位置: 首页 > news >正文

Java:SpringBoot 整合Spring-Retry实现错误重试

SpringBoot 整合Spring-Retry可以实现错误重试

目录

    • 引入依赖
    • 开启spring-retry
    • 使用重试注解
      • `@Retryable` 注解
      • `@Backoff` 注解
    • 测试
    • 参考

引入依赖

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

完整依赖pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- spring-retry --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

开启spring-retry

启动类上增加注解 @EnableRetry

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.retry.annotation.EnableRetry;@EnableRetry
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

使用重试注解

@Retryable 注解

  • value,可重试的异常类型。含义同include。默认为空(如果excludes也为空,则重试所有异常)
  • include:可重试的异常类型。默认为空(如果excludes也为空,则重试所有异常)
  • exclude:无需重试的异常类型。默认为空(如果includes也为空,则重试所有异常)
  • maxAttempts:最大重试次数(包括第一次失败),默认为3次
  • backoff:重试等待策略,下面会在@Backoff中介绍
  • recover:表示重试次数到达最大重试次数后的回调方法

@Backoff 注解

  • delay,重试之间的等待时间(以毫秒为单位)
  • maxDelay,重试之间的最大等待时间(以毫秒为单位)
  • multiplier,指定延迟的倍数
  • delayExpression,重试之间的等待时间表达式
  • maxDelayExpression,重试之间的最大等待时间表达式
  • multiplierExpression,指定延迟的倍数表达式
  • random,随机指定延迟时间

使用示例

package com.example.demo.component;import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Component;@Component
public class HttpRequest {private int count = 0;/*** 模拟网络请求异常* @return*/@Retryable(recover = "errorHandler")public String getResponse() {count++;System.out.println("time: " + count);if (count < 4) {throw new RuntimeException("count: " + count);}return "success";}/*** 错误处理函数* 注意:需要返回 String,否则会抛出方法找不到异常* org.springframework.retry.ExhaustedRetryException: Cannot locate recovery method** @param e* @return*/@Recoverpublic String errorHandler(RuntimeException e) {System.out.println("errorHandler");return "ok";}
}

测试

package com.example.demo.component;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class HttpRequestTest {@Autowiredprivate HttpRequest httpRequest;@Testpublic void getResponse(){httpRequest.getResponse();}
}

输出结果

time: 1
time: 2
time: 3
errorHandler

参考

  • SpringBoot 中使用 spring-retry 轻松解决重试
http://www.lryc.cn/news/18852.html

相关文章:

  • MyBatis学习笔记(二) —— 搭建MyBatis项目
  • linux服务器上Docker中安装jenkins
  • 自考都有哪些科目?怎么搭配报考?
  • HIVE --- 高级查询
  • 【手撕源码】vue2.x双向数据绑定原理
  • Allegro如何显示层叠Options和Find操作界面
  • 【数据结构】双向链表
  • Editor工具开发基础三:自定义组件菜单拓展 CustomEditor
  • 拒绝摆烂!神仙网站Python自学,一路从入门闯到最后,边学边玩
  • Linux基础命令-locate快速查找文件
  • 揭穿数据分析的六大谎言
  • LinkSLA智能运维技术派-Redis的监控
  • Hugging face 模型微调学习:T5-base的微调
  • JavaScript 测试 Prototype
  • pnpm / yarn / npm管理依赖包
  • 注意力机制详解系列(一):注意力机制概述
  • 搜索引擎 Elasticsearch 的三大坑
  • 运营级手机直播平台源码 短视频直播带货APP源码
  • http/HTTPS相关的一些知识
  • MySQL高可用 集群(MHA)
  • 【JavaScript速成之路】JavaScript运算符
  • 计网个人作业05
  • 码匠 × OpenAI :快速生成 SQL 语句,提升开发效率!
  • 电脑显示屏不亮但是主机已开机?5种原因以及解决方案
  • 公司项目vue cli2升级到vue cli3
  • 流程图培训
  • 编写使用多buffer的应用程序
  • 【java 8】强大的 Stream API
  • 自动驾驶仿真:ECU TEST自动化测试常用API调用
  • notepad++中使用正则表达式