java retry怎么用_使用spring-retry实现重试机制

我们经常会遇到一些场景,需要重试当前的操作,比如:文件上传失败,重新上传;微信accesstoken获取失败,重新获取等等的场景问题。那么今天就说一种可以实现此种机制的工具包:spring-retry。

74d0d40f3a91af7b91587255dfdab34b.png

如图,可以看到spring-retry最新版本是1.2.2.RELEASE, 该工具把重试操作模板定制化,可以设置重试策略和回退策略。同时重试执行实例保证线程安全。

要是用它,先引入架包:

org.springframework.retry

spring-retry

1.2.2.RELEASE

具体的代码实现:

// 构建重试模板实例

RetryTemplate retry=new RetryTemplate();

//设置重试策略,主要设置重试次数

SimpleRetryPolicy srp = new SimpleRetryPolicy();

srp.setMaxAttempts(3);// 重试3次

//设置重试回退操作策略,主要设置重试间隔时间

FixedBackOffPolicy fbop = new FixedBackOffPolicy();

fbop.setBackOffPeriod(2000);//重试间隔2s,单位ms

retry.setRetryPolicy(srp);

retry.setBackOffPolicy(fbop);

//重试器,重试成功后返回 true

final RetryCallback dmReCall=new RetryCallback(){

@Override

public Object doWithRetry(RetryContext context) throws Exception {// 开始重试

//这里填写要重试的逻辑代码

System.out.println("do some thing");

//规定在哪种状态下,发生异常,才会进行重试

if(true){

throw new RuntimeException();//这里需要注意,重试的根源是抛出异常

}

return null; //成功之后返回的数据,可以是任意数据类型

}

};

//重试失败后,执行-

final RecoveryCallback rvcb=new RecoveryCallback(){

@Override

public Object recover(RetryContext context) throws Exception { // 重试多次后都失败了

//这里可以添加最后失败的代码逻辑

logger.info("------- RecoveryCallback --------");

return false; //重试后失败返回的数据,可以是任意数据类型

}

};

//删除菜单重试机制开始

try {

Object obj = retry.execute(dmReCall,rvcb);

//这里可以根据obj的数据进行判断,重试最终成功了,还是失败了。

System.out.println("do some obj");

} catch (Exception e) {

//error

}

RetryTemplate 承担了重试执行者的角色,它可以设置SimpleRetryPolicy(重试策略,设置重试上限,重试的根源实体),FixedBackOffPolicy(固定的回退策略,设置执行重试回退的时间间隔)。      RetryTemplate通过execute提交执行操作,需要准备RetryCallback 和RecoveryCallback 两个类实例,前者对应的就是重试回调逻辑实例,包装正常的功能操作,RecoveryCallback实现的是整个执行操作结束的恢复操作实例。同时RetryTemplate的execute 是线程安全的。

有重试机制需要的,可以尝试下这个工具。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值