火速网站建设,广州微网站建设哪家好,天津优化加盟,计算机网络技术课程SpringBoot 整合Spring-Retry可以实现错误重试 目录引入依赖开启spring-retry使用重试注解Retryable 注解Backoff 注解测试参考引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactI…SpringBoot 整合Spring-Retry可以实现错误重试 目录引入依赖开启spring-retry使用重试注解Retryable 注解Backoff 注解测试参考引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId
/dependency
dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactId
/dependency完整依赖pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.7/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.example/groupIdartifactIddemo/artifactIdversion0.0.1-SNAPSHOT/versionnamedemo/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- spring-retry --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependencydependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/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 轻松解决重试