枣庄定制网站建设制作,网络营销方式变化背后的逻辑与趋势,wordpress xmlrpc,如何做搜索引擎网站Spring Retry——方法重试、方法重新调用 简介#xff1a;使用1. 配置2.使用 总结注意 简介#xff1a;
Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况#xff0c;通过自动重试失败的操作#… Spring Retry——方法重试、方法重新调用 简介使用1. 配置2.使用 总结注意 简介
Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况通过自动重试失败的操作提供了一种可靠的方式来处理潜在的异常或错误。 除此之外Spring Retry 是基于 Spring AOPAspect-Oriented Programming实现的。 Spring Retry 使用了 Spring AOP的切面Aspect来定义重试的逻辑。切面可以在方法调用之前、之后或抛出异常时执行特定的代码。通过在切面中定义重试的逻辑Spring Retry 可以自动捕获异常并重新尝试方法调用而不需要在每个方法上编写重试逻辑。 使用
1. 配置
为了启用 Spring Retry 的支持首先要在pom.xml 文件中添加以下依赖项 dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactIdversion1.3.1/version/dependency因为 Spring Retry 是基于AOP实现的所以我们还要引入aop的相关依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency2.使用
1、在pom.xml文件中配置完之后我们还要再启动类上添加EnableRetry注解。
SpringBootApplication
EnableRetry
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}2、Retryable 在需要重试的方法上加上Retryable注解当指定的方法抛出异常之后Retryable抓取到异常并重新调用该方法 Retryablepublic void retry (String s){ //123System.out.println(s);System.out.println(###########);throw new RuntimeException();}控制台输出
123
###########
123
###########
123
###########由于没有指定任何异常因此将尝试重试所有异常。此外一旦达到最大尝试次数但仍有异常就会抛出 ExhaustedRetryException。
interceptor可以通过该参数指定方法拦截器的bean名称value抛出指定异常才会重试include和value一样默认为空当exclude也为空时默认所以异常exclude指定不处理的异常maxAttempts最大重试次数默认3次backoff重试等待策略默认使用BackoffBackoff的value默认为1000L我们设置为2000Lmultiplier指定延迟倍数默认为0表示固定暂停1秒后进行重试如果把multiplier设置为1.5则第一次重试为2秒第二次为3秒第三次为4.5秒。
3、Recover 当 Retryable指定的方法的重试次数用尽之后程序就会走到 Recover注解的方法中 Retryablepublic void retry (String s){System.out.println(s);System.out.println(###########);throw new RuntimeException();}Recoverpublic void recover(){System.out.println(recover);}控制台输出
123
###########
123
###########
123
###########
recover4、RetryTemplate 除此之外 Spring Retry不止可以使用注解的形式还配备了RetryTemplate接口方便以接口的形式使用
Testpublic void test(){RetryTemplate retryTemplate RetryTemplate.builder().maxAttempts(3).build();retryTemplate.execute((RetryCallbackVoid, RuntimeException) context - {// 需要重试的方法调用needRetry();return null;}, (RecoveryCallbackVoid) context - {// 重试次数达到上限后执行降级操作fallback();return null;});}public void needRetry(){System.out.println(0123456);System.out.println();throw new RuntimeException();}public void fallback(){System.out.println(*******);System.out.println(********);throw new RuntimeException();}
控制台输出
012345601234560123456*******
********
总结
Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况通过自动重试失败的操作提供了一种可靠的方式来处理潜在的异常或错误。
Spring Retry 的主要特点包括
简单易用通过在方法上添加 Retryable 注解可以轻松启用重试机制。同时还可以使用 Backoff 注解来配置指数退避策略。自定义重试逻辑通过实现 RetryTemplate 接口可以自定义重试的逻辑包括重试次数、休眠时间、异常类型等。支持多种触发条件Spring Retry 支持多种触发重试的条件包括抛出异常、返回特定值等。 集成性好Spring Retry 与 Spring Boot 集成良好可以方便地与其他 Spring 功能如监控、日志等集成。
Spring Retry 相比递归在处理重试逻辑方面有以下优点
简单易用Spring Retry 提供了一种声明式的方式来处理重试逻辑只需要在方法上添加相应的注解即可。相比之下递归需要手动编写循环和条件判断代码相对复杂且容易出错。可配置性强Spring Retry 提供了丰富的配置选项例如重试次数、休眠时间、异常类型等可以根据实际需求进行灵活配置。而递归的重试机制通常需要手动编写逻辑难以实现灵活的配置。资源利用率高Spring Retry 在重试之间会根据配置进行休眠避免了无休止的递归调用造成的栈溢出问题。同时Spring Retry 使用了循环重试机制每次重试都会重新计算下一次重试的时间避免了资源的浪费。扩展性强Spring Retry 提供了事件通知和自定义策略等扩展点可以根据实际需求进行定制和扩展。而递归的方式通常难以实现这些高级功能。
注意
在使用过程中发现当异常被try捕捉到之后将不会触发Retryable 重试