Spring Retry提供了操作重试的功能,在网络不稳定的情况下,重试功能是比较重要的必备项。Spring Retry可以让我们自定义重试策略,回退策略,重试状态处理。
使用
1 添加依赖,默认情况下在Spring Boot中有依赖项。
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<!-- <version>1.1.5.RELEASE</version> -->
</dependency>
<!-- Spring Retry使用了AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
2 配置RetryTemplate,重试策略,回退策略。或者监听器
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
// 每次回退固定的时间
// FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
// fixedBackOffPolicy.setBackOffPeriod(2000l);
// 指数回退,第一次回退0.2s,第二次回退0.4s
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setInitialInterval(200L);
exponentialBackOffPolicy.setMultiplier(2);
retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);
// 重试策略,有多种重试策略
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(3);
retryTemplate.setRetryPolicy(retryPolicy);
retryTemplate.setThrowLastExceptionOnExhausted(false);
return retryTemplate;
}
3 使用重试功能
retryTemplate.execute((RetryCallback<Void, RuntimeException>) context -> {
// 这里写我们的业务代码
// ....
// 模拟抛出异常
throw new RuntimeException("异常");
});
4 可以开启日志查看效果
logging.level.org.springframework.retry=debug
注解
- @Retryable
- @Recover
- @Backoff
注意
Spring Retry有一个缺点,其回退策略,默认使用的是Thread.sleep方法,会导致当前的线程被阻塞,因此使用的时候要注意。
最后
简单说明了下Spring Retry的使用方式,使用简单,功能强大。