本文主要是介绍Spring Retry 简单使用实例。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近遇到一个需要解决并发的业务,毕竟经历少,所以试着用用这个spring的重试机制。花了半天时间搞定,踩了略微几个小坑,丢个demo在这,以后备用。(这篇文章,是在看了很多前辈的文章以后写的。部分api解释,有抄袭嫌疑。)
一:首先Maven引入包
<dependency><groupid>org.springframework</groupid><artifactid>spring-aop</artifactid><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.8</version></dependency><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.2.2.RELEASE</version></dependency>
需要依赖的spring的切面包,还有其他的包,没仔细看,但基本的spring项目引入的包就够了。
二:注解解释(粘贴并总结了几位前辈的解释。):
这里是基于注解实现重试机制。最基本的,我们需要以下这几个注解:
@EnableRetry
:能否重试。注解类的(这个需要在service类上注解),其proxyTargetClass属性为true时,使用CGLIB代理。默认使用标准JAVA注解。当类中有@Retryable注释的方法时,对该方法生成代理。
@Retryable
:注解需要被重试的方法。
value:指定发生的异常进行重试
include:和value一样,默认空,当exclude也为空时,所有异常都重试
exclude:指定异常不重试,默认空,当include也为空时,所有异常都重试
maxAttemps:重试次数,默认3
backoff:重试补偿机制,默认没有
@Backoff
:重试等待策略。
delay:指定延迟后重试
multiplier:指定延迟的倍数
不设置参数时,默认使用FixedBackOffPolicy,重试等待1000ms
只设置delay()属性时,使用FixedBackOffPolicy,重试等待指定的毫秒数
当设置delay()和maxDealy()属性时,重试等待在这两个值之间均态分布
使用delay(),maxDealy()和multiplier()属性时,使用ExponentialBackOffPolicy
当设置multiplier()属性不等于0时,同时也设置了random()属性时,使用ExponentialRandomBackOffPolicy
@Recover
: 用于方法。用于@Retryable所有重试失败的时候,的处理方法。@Recover注释的方法参数为@Retryable异常类,返回值应与重试方法返回相同,否则无法识别!需要注意的是发生的异常和入参类型一致时才会回调。
三:demo
@EnableRetry
@Service
public class RetryDemoService {Logger logger = Logger.getLogger(getClass());@AutowiredDemoService demoService;@Retryable(value = Exception.class)public String doDemo(String testStr) throws Exception {String a = "a";if(a.equals("a")){throw new Exception();}return a;}@Recoverpublic void recover(Exception e) {logger.error("重试机制3次完成,结果依然异常..");}
这段代码是从业务代码贴出来的,不负责任的改了名字啥的,而且米有测试。只作为观看用的,哈哈哈。
四:有坑
(1) 由于retry用到了aspect增强,所有会有aspect的坑,就是方法内部调用,会使aspect增强失效,那么retry当然也会失效.前辈的链接地址
(2) 重试机制,不能在接口实现类里面写。所以要做重试,必须单独写个service。
浅坑就这么些。注解方式,抄袭代码还是很简单的。然后就是还有很多特性,有兴趣的自己去研究下。这么6的工具。
这篇关于Spring Retry 简单使用实例。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!