您好,登录后才能下订单哦!
本文小编为大家详细介绍“SpringBoot整合Retry如何实现错误重试”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot整合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>
完整依赖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>
启动类上增加注解 @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);
    }
}value,可重试的异常类型。含义同include。默认为空(如果excludes也为空,则重试所有异常)
include:可重试的异常类型。默认为空(如果excludes也为空,则重试所有异常)
exclude:无需重试的异常类型。默认为空(如果includes也为空,则重试所有异常)
maxAttempts:最大重试次数(包括第一次失败),默认为3次
backoff:重试等待策略,下面会在@Backoff中介绍
recover:表示重试次数到达最大重试次数后的回调方法
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
     */
    @Recover
    public 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 {
    @Autowired
    private HttpRequest httpRequest;
    @Test
    public void getResponse(){
        httpRequest.getResponse();
    }
}输出结果
time: 1
time: 2
time: 3
errorHandler
读到这里,这篇“SpringBoot整合Retry如何实现错误重试”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。