通过注解和反射写的一个方法异常重试,但会陷入重复循环,求解

白小衣 发布于 2019/08/26 14:11
阅读 450
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

重试实现方式:

@Around(value = "@annotation(retry)")
public Object aroundCut(ProceedingJoinPoint joinPoint, Retry retry)

通过在方法上添加@Retry注解,捕获到异常后,拿到方法参数,类型等信息,然后通过反射去再调用方法,这个时候会陷入死循环,求解

 

 

加载中
0
51weike
51weike
该评论暂时无法显示,详情咨询 QQ 群:点此入群
独孤晓林
回复 @白小衣 : 那就自己写计数器就好了
白小衣
白小衣
次数?要侵入代码么,在方法参数上专门加一个int来记录调用次数,每次捕获到参数去修改加1? 有没有不侵入代码的方法
0
Kingviker
Kingviker

目标方法执行-》抛异常-》被捕获-》执行retry注解-》执行目标方法

这可不就是死循环? 肯定要加重试次数啊。。 

支持重试功能的注解100%的会有重试次数的参数, 不然这个框架不可能被大家认可的。

白小衣
白小衣
不侵入代码的情况下,下一次捕获到异常怎么拿到上一次的次数?
0
大地的谎言
大地的谎言

在你的aroundCut中,记录方法执行次数,超过限制抛出异常,不再重试

0
白小衣
白小衣

用ThreadLocal解决了,重试进入调用时ThreadLocal设置个true的bool值,@Around里判断下这个值是否有值是否为true就可以知道是正常业务调用还是重试调用了

逍遥huang
逍遥huang
这种肯定是threadlocal了
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部