Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况,通过自动重试失败的操作,提供了一种可靠的方式来处理潜在的异常或错误。
除此之外:Spring Retry 是基于 Spring AOP(Aspect-Oriented Programming)实现的
。
Spring Retry 使用了 Spring AOP的切面(Aspect)来定义重试的逻辑。切面可以在方法调用之前、之后或抛出异常时执行特定的代码。通过在切面中定义重试的逻辑,Spring Retry 可以自动捕获异常并重新尝试方法调用,而不需要在每个方法上编写重试逻辑。
为了启用 Spring Retry 的支持,首先要在pom.xml 文件中添加以下依赖项
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.3.1</version>
</dependency>
因为 Spring Retry 是基于AOP实现的所以我们还要引入aop的相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
1、在pom.xml文件中配置完之后,我们还要再启动类上添加@EnableRetry注解。
@SpringBootApplication
@EnableRetry
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2、@Retryable
在需要重试的方法上加上@Retryable注解,当指定的方法抛出异常之后@Retryable抓取到异常并重新调用该方法
@Retryable
public void retry (String s){ //123
System.out.println(s);
System.out.println("###########");
throw new RuntimeException();
}
控制台输出:
123
###########
123
###########
123
###########
由于没有指定任何异常,因此将尝试重试所有异常。此外,一旦达到最大尝试次数,但仍有异常,就会抛出 ExhaustedRetryException。
3、@Recover
当 @Retryable指定的方法的重试次数用尽之后,程序就会走到 @Recover注解的方法中
@Retryable
public void retry (String s){
System.out.println(s);
System.out.println("###########");
throw new RuntimeException();
}
@Recover
public void recover(){
System.out.println("======>recover");
}
控制台输出:
123
###########
123
###########
123
###########
======>recover
Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况,通过自动重试失败的操作,提供了一种可靠的方式来处理潜在的异常或错误。
Spring Retry 的主要特点包括:
Spring Retry 相比递归在处理重试逻辑方面有以下优点:
在使用过程中,发现当异常被try捕捉到之后将不会触发@Retryable 重试