1
使用背景
在实际项目中其中一部分逻辑可能会因为调用了外部服务或者等待锁等情况下出现不可预料的异常,在这个时候我们可能需要对调用这部分逻辑进行重试,代码里面主要就是使用for循环写一大坨重试的逻辑,各种硬编码,各种辣眼睛的补丁。
特别是针对重试的逻辑,到处都有。所以我决定用一个重试组件优化一波。它的出现,解决掉这部分丑陋的代码!
这个组件的源码地址如下:https://github.com/spring-projects/spring-retry
废话不多说,直接上代码吧!
2
开始上代码首先引入依赖:
由于该组件是依赖于 AOP 给你的,所以还需要引入这个依赖(如果你其他 jar 包中引用过了,当然也就不需要再次引用了):
开启重试:
Controller层
Service层
Service层具体实现
3
此类中用于恢复的方法的名称。方法必须用 {@link Recover} 注释标记。
可重试的异常类型。包括()的同义词。默认为空(如果 excludes 也为空,则重试所有异常)。
不可重试的异常类型。默认为空(如果包含也为空,则重试所有异常)。如果 include 为空但 excludes 不是,则重试所有未排除的异常
方法重试调用次数,默认3次
指定用于重试此操作的其他属性
4
@backoff注解
:重试之间间隔时间
:重试之间的等待时间(以毫秒为单位)
:重试之间的最大等待时间(以毫秒为单位)
:指定延迟的倍数
:重试之间的等待时间表达式
:重试之间的最大等待时间表达式
:指定延迟的倍数表达式
:随机指定延迟时间
5
@Recover注解
主要作用是标记方法为一个重试方法的补偿方法!!!
6
注意事项
方法重试依赖于 spring 注入,所以调用的方法的类必须是被spring管理的,然后通过 @Autowired 或 @Resource 引入使用,不然不会生效
方法重试的前提是方法抛出了异常,在方法执行出现了异常且没有被捕获的情况下重试
方法重试需要在方法上面加上注解 @Retryable
方法重试的补偿方法上面必须携带@Recover注解
@Recover方法需要和@Retryable方法在同一个类中才能生效@Recover方法(@Recover方法在父类中也可以生效)
使用@Retryable注解,如果类中没有被@Recover标示的方法,无论是否使用 recover 属性都抛出原有异常
使用@Retryable注解同时 recover 属性不是空,如果类中有@Recover标示的方法,但是标示的方法不是 recover 指定的方法,抛出ExhaustedRetryException异常
使用@Retryable注解同时 recover 属性不是空,同时方法有注解@Recover,但是补偿方法的参数不是当前异常或者异常的父类,抛出ExhaustedRetryException 异常
使用@Retryable注解不使用 recover 属性,如果类中被@Recover标示的方法有和原方法返回值一样的,使用当前被@Recover标示的方法(此时方法参数可随意,但是不能是除开当前异常的类及父类的异常类)
– END –
1,并发编程(手写笔记:并发编程+并发编程原理+并发编程应用+并发编程_模式)
并发编程共享模型篇
并发编程_模式篇
并发编程_应用篇
并发编程_原理篇
并发编程共享模型篇
并发编程_模式篇
并发编程_应用篇
并发编程_原理篇
**2,性能调优(Java性能调优实战:Java编程性能调优+JVM性能优化+Mysql调优笔记)**在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
JVM性能优化
JVM性能优化
JVM性能监测及调优
JVM性能监测及调优
Mysql调优笔记
3,Spring开源框架源码解读
4,缓存数据库
Redis核心笔记
Redis核心笔记
MongDB基础到进阶
25大Java面试专题
1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以进群学习。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以进群学习。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以学习。
4、觉得自己很牛,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以进群学习。 5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
BATJ JAVA经典必考面试题库
最新BAT java经典必考面试题链接:https://pan.baidu.com/s/1B_Lc1tluda0fbdrFnexOMQ
提取码:gw8d