Springboot-Retry组件@Recover失效问题解决,java常用框架面试

代码说明

1、我们可以看到retry方法会重试supplier的get结果,捕获异常并抛出异常。这里抛出后会被retry捕获并且重试。

2、maxAttempts参数为重试的最大次数。

3、backoff中的delay为两次重试之间的延迟,multiplier为重试阻尼,可以这么理解,每次重试间隔时间为上一次重试间隔时间的倍数。

4、如果3次重试均抛出异常,则进入recover方法。

编写测试代码

package ai.guiji.csdn.component;

import cn.hutool.core.convert.Convert;

import cn.hutool.http.HttpUtil;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

/** @Author 剑客阿良_ALaing @Date 2021/11/30 13:08 @Description: */

@SpringBootTest

class RetryUtilTest {

@Autowired private RetryUtil retryUtil;

@Test

void retry() {

try {

System.out.println(Convert.toStr(retryUtil.retry(() -> HttpUtil.post(“xxxx”, “”)), “haha”));

} catch (Exception exception) {

exception.printStackTrace();

}

}

}

执行测试结果

2021-11-30 13:37:44.012 ERROR 13600 — [ main] ai.guiji.csdn.component.RetryUtil : 异常报错:UnknownHostException: xxxx

2021-11-30 13:37:49.019 ERROR 13600 — [ main] ai.guiji.csdn.component.RetryUtil : 异常报错:UnknownHostException: xxxx

2021-11-30 13:37:58.787 ERROR 13600 — [ main] ai.guiji.csdn.component.RetryUtil : 异常报错:UnknownHostException: xxxx

org.springframework.retry.ExhaustedRetryException: Cannot locate recovery method; nested exception is cn.hutool.core.io.IORuntimeException: UnknownHostException: xxxx

at org.springframework.retry.annotation.RecoverAnnotationRecoveryHandler.recover(RecoverAnnotationRecoveryHandler.java:70)

at org.springframework.retry.interceptor.RetryOperationsInterceptor$ItemRecovererCallback.recover(RetryOperationsInterceptor.java:142)

at org.springframework.retry.support.RetryTemplate.handleRetryExhausted(RetryTemplate.java:539)

at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:387)

at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:225)

at org.springframework.retry.interceptor.RetryOperationsInterceptor.invoke(RetryOperationsInterceptor.java:116)

at org.springframework.retry.annotation.AnnotationAwareRetryOperationsInterceptor.invoke(AnnotationAwareRetryOperationsInterceptor.java:163)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)

at ai.guiji.csdn.component.RetryUtil E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpr

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值