Spring方法自定义重试次数及延迟

背景

项目调第三方接口的时候需要用到token数据,一旦token失效,调用其他方法将会抛出异常,在其他方法抛出异常后需要重新获取token并再次调用该方法返回正确的数据,所以想到方法重试,借此在网上查了有好几种方法,其中最简便的便是Spring-try包的重试方法了。

实现

导入相关依赖包

		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>

注意:使用spring-boot不要导错了包,不是spring-boot-starter-retry,上面导入的包才是正解。

基本实现

@Component
public class MyTest {

    @Retryable(value = RuntimeException.class,
            maxAttempts = 3,
            backoff = @Backoff(delay = 5000L, multiplier = 2))
    public String call() {
        throw new RuntimeException("RPC调用异常");
    }
    
    @Recover
    public void recover(RemoteAccessException e) {
        System.out.println(e.getMessage());
    }
    
}

在需要重试的方法上面添加@Retryable注解,其中value是重试该方法需要方法抛出的异常类型。maxAttempts是方法重试最大次数(默认为3次),backoff为重试该方法backoff属性,@Backoff中可选填多个属性,示例中delay表示延迟执行时间,multiplier表示计算下一个延迟数的乘数。

其中@Recover是熔断机制,在重试失败时执行。

总结

spring-retry是基于异常来对方法重试进行控制的,如果需要通过对象的属性来控制方法重试可以使用guava-retrying,在此不再多讲。

本文参考了该博客,里面一步一步实现方法重试,建议要深入了解的可自行前往:
https://blog.51cto.com/9250070/2156431

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值