Rumah >Java >javaTutorial >Bagaimana SpringBoot menyepadukan Cuba semula untuk melaksanakan cubaan semula ralat
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>
Kebergantungan lengkap 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>
Tambahkan kelas permulaan Anotasi @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); } }
nilai, jenis pengecualian boleh cuba semula. Maksudnya sama dengan memasukkan. Lalai adalah kosong (jika tidak termasuk juga kosong, semua pengecualian akan dicuba semula)
termasuk: jenis pengecualian boleh cuba semula. Lalai adalah kosong (jika tidak termasuk juga kosong, semua pengecualian akan dicuba semula)
kecualikan: Jenis pengecualian yang tidak memerlukan cuba semula. Lalai adalah kosong (jika termasuk juga kosong, semua pengecualian akan dicuba semula)
maxAttempts: Bilangan maksimum percubaan semula (termasuk kegagalan pertama), lalai ialah 3 kali
undur: Cuba semula strategi menunggu, yang akan diperkenalkan dalam @Backoff di bawah
pulih: Menunjukkan kaedah panggil balik selepas bilangan percubaan semula mencapai maksimum bilangan percubaan semula
kelewatan, masa menunggu antara percubaan semula (dalam milisaat)
MaxDelay, masa menunggu maksimum antara percubaan semula (dalam milisaat)
pendarab, nyatakan gandaan kelewatan
delayExpression , ungkapan bagi masa menunggu antara percubaan semula
maxDelayExpression, ungkapan masa menunggu maksimum antara percubaan semula
multiplierExpression, menyatakan kelewatan Ungkapan berbilang
rawak, nyatakan masa tunda secara rawak
Contoh penggunaan
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(); } }
Hasil output
masa: 1
masa: 2
masa: 3
errorHandler
Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan Cuba semula untuk melaksanakan cubaan semula ralat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!