spring retry 使用
1. 场景
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dalong.spring.io</groupId><artifactId>springretrydemo</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.2.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.1.5.RELEASE</version><!--$NO-MVN-MAN-VER$ --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.geronimo.bundles</groupId><artifactId>aspectjweaver</artifactId><version>1.6.8_2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><!--$NO-MVN-MAN-VER$ --><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>
@ServicepublicclassFirstService{@Retryable(value=RemoteAccessException.class,maxAttempts=3,backoff=@Backoff(delay =5000l,multiplier =1))publicString service(String value){// ... do somethingSystem.out.println("do something...");if(null==value||"".equals(value)){thrownewRemoteAccessException("RPC调用异常");}else{return"dalong demo info";}}@RecoverpublicString recover(RemoteAccessException e){// ... panicSystem.out.println(e.getMessage());System.out.println("rong method");return e.getMessage();}}
@ServicepublicclassMyService2{@AutowiredpublicUserOperator userOperator;publicUserInfo getUserinfo()throwsTimeoutException{RetryTemplate template =newRetryTemplate();TimeoutRetryPolicy policy =newTimeoutRetryPolicy();policy.setTimeout(1000L);template.setRetryPolicy(policy);UserInfo result = template.execute(newRetryCallback<UserInfo,TimeoutException>(){@OverridepublicUserInfo doWithRetry(RetryContext context)throwsTimeoutException{// TODO Auto-generated method stubUserInfo info =null;info = userOperator.getUserinfo();return info;}},newRecoveryCallback<UserInfo>(){@OverridepublicUserInfo recover(RetryContext context)throwsException{// TODO Auto-generated method stubUserInfo inf =newUserInfo();inf.setDate(newDate());inf.setAge(333);inf.setInfo("default");return inf;}});return result;}}
@ServicepublicclassUserOperator{publicUserInfo getUserinfo()throwsTimeoutException{UserInfo info =newUserInfo();info.setDate(newDate());info.setAge(333);info.setInfo("dddddd");try{Thread.sleep(2000);}catch(InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();thrownewTimeoutException("timeout");}return info;}}
@AutowiredpublicMyService2 myService2;@RequestMapping(value ="/user", method =RequestMethod.GET)publicObject getuser()throwsTimeoutException{UserInfo info =null;info = myService2.getUserinfo();return info;// return "this is demo";}
- org.springframework.retry.policy.SimpleRetryPolicy
该策略定义了对指定的异常进行若干次重试。默认情况下,对Exception异常及其子类重试3次。如果创建SimpleRetryPolicy并指定重试异常map,可以选择性重试或不进行重试。下面的代码定义了对TimeOutException进行重试 - org.springframework.retry.policy.NeverRetryPolicy
执行一次待执行操作,若出现异常后不进行重试。 - org.springframework.retry.policy.AlwaysRetryPolicy
异常后一直重试直到成功。 - org.springframework.retry.policy.TimeoutRetryPolicy
在执行execute方法时从open操作开始到调用TimeoutRetryPolicy的canRetry方法这之间所经过的时间。这段时间未超过TimeoutRetryPolicy定义的超时时间,那么执行操作,否则抛出异常。 org.springframework.retry.policy.ExceptionClassifierRetryPolicy
根据产生的异常选择重试策略。
org.springframework.retry.policy.CompositeRetryPolicy
用户指定一组策略,随后根据optimistic选项来确认如何重试。
spring retry 使用的更多相关文章
- Spring retry基本使用
Spring retry基本使用 背景介绍 在实际工作过程中,重试是一个经常使用的手段.比如MQ发送消息失败,会采取重试手段,比如工程中使用RPC请求外部服务,可能因为网络 波动出现超时而采取重试手段 ...
- 自己动手实践 spring retry 重试框架
前序 马上过年了,预祝大家,新年快乐,少写bug 什么是spring retry? spring retry是从spring batch独立出来的一个能功能,主要实现了重试和熔断. 什么时候用? 远程 ...
- Spring Retry
最近组内准备将项目中原有的重试功能抽取出来重构为一个重试平台,由于对重试的功能要求比较高,采用了不少中间件和框架(jimdb,jproxy, Elastic-Job ,JMQ,Hbase, Disru ...
- Spring retry实践
在开发中,重试是一个经常使用的手段.比如MQ发送消息失败,会采取重试手段,比如工程中使用RPC请求外部服务,可能因为网络波动出现超时而采取重试手段......可以看见重试操作是非常常见的一种处理问题, ...
- Spring异常重试框架Spring Retry
Spring Retry支持集成到Spring或者Spring Boot项目中,而它支持AOP的切面注入写法,所以在引入时必须引入aspectjweaver.jar包. 快速集成的代码样例: @Con ...
- 【spring】spring retry介绍
一.为什么需要重试? 我们知道只要是网络请求都有失败的情况,这个时候增加retry机制是必要的.而spring全家桶中就有这么一套机制. 二.spring retry spring系列的spring ...
- 异常重试框架Spring Retry实践
前期准备在Maven项目中添加Spring Retry和切面的依赖 POM: <!-- Spring Retry --> <dependency> <groupId> ...
- Spring框架中一个有用的小组件:Spring Retry
1.概述 Spring Retry 是Spring框架中的一个组件, 它提供了自动重新调用失败操作的能力.这在错误可能是暂时发生的(如瞬时网络故障)的情况下很有帮助. 在本文中,我们将看到使用Spri ...
- Spring Retry 在SpringBoot 中的应用
Spring Boot中使用Spring-Retry重试框架 Spring Retry提供了自动重新调用失败的操作的功能.这在错误可能是暂时的(例如瞬时网络故障)的情况下很有用. 从2.2.0版本开始 ...
- Spring Retry 重试
重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次.用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有.话不多说 ...
随机推荐
- jquery 如何去除select 控件重复的option
这个去重不是很好用,如果id值不同,text是一样的,也会被去掉 <input type="button" class="btn" id="bt ...
- c#缓存介绍(转)
缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 本章从缓存 ...
- [转]XSS现代WAF规则探测及绕过技术
初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如果 ...
- jdk 编译器 对final字段的处理
class FinalTest{ void a(){ final int i=10; int j=10; } } stack=2, ...
- .NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法
12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了. 现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势. 我是个水货,所以 ...
- 64位系统下找不到office 32位组件
如果系统式64位的,而装的是32位的office软件,在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Microsoft Excel程序, 这主要是64位系统的问题,exc ...
- Java SCP copy local file to remote implementation
最近做的项目中,有一个小需求,需要通过SCP把本地文件copy到远程服务器.查了好多资料,最终解决方案简单快速,分享一下. 在这里,需要用到4个jar包,分别是ant-jsch.jar,ant-lau ...
- navicat在ubuntu下中文乱码的真正解决方法ZT
乱码解决方法(自己解决我自己这种情况之后打猜测): 打开start_navicat文件,会看到 export LANG="en_US.UTF-8" 将这句话改为 export LA ...
- c# DllImport 找不到指定模块
两年前的一个项目,基于身份证阅读器的开发,之前都是在公司电脑上开发维护等,今天有需要用到自己的笔记本,只有vs2008和mysql5.5,以为足够,兴致勃勃的拿到客户那里现场解决问题,F5运行程序,程 ...
- XML代码生成器——XMLFACTORY 简介(三)
XML代码生成器——XMLFACTORY 简介(三) 这一篇我们讲“类名称”页签 的配置功能,您将了解到:如何为Xml元素指定对应的类名称及脱壳功能. 如果,你没看过这个系列的第一篇文章,请先去看这篇 ...