本文介绍了Spring重试支持Spring Retry的方法,分享给大家,具体如下:

第一步、引入maven依赖

org.springframework.boot

spring-boot-starter-parent

1.5.3.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.retry

spring-retry

1.1.2.RELEASE

org.aspectj

aspectjweaver

1.8.6

第二步、添加@Retryable和@Recover注解

package hello;

import org.springframework.remoting.RemoteAccessException;

import org.springframework.retry.annotation.Backoff;

import org.springframework.retry.annotation.Recover;

import org.springframework.retry.annotation.Retryable;

import org.springframework.stereotype.Service;

@Service

public class RemoteService {

@Retryable(value= {RemoteAccessException.class},maxAttempts = 3,backoff = @Backoff(delay = 5000l,multiplier = 1))

public void call() throws Exception {

System.out.println("do something...");

throw new RemoteAccessException("RPC调用异常");

}

@Recover

public void recover(RemoteAccessException e) {

System.out.println(e.getMessage());

}

}

@Retryable注解

被注解的方法发生异常时会重试

value:指定发生的异常进行重试

include:和value一样,默认空,当exclude也为空时,所有异常都重试

exclude:指定异常不重试,默认空,当include也为空时,所有异常都重试

maxAttemps:重试次数,默认3

backoff:重试补偿机制,默认没有

@Backoff注解

delay:指定延迟后重试

multiplier:指定延迟的倍数,比如delay=5000l,multiplier=2时,第一次重试为5秒后,第二次为10秒,第三次为20秒

@Recover

当重试到达指定次数时,被注解的方法将被回调,可以在该方法中进行日志处理。需要注意的是发生的异常和入参类型一致时才会回调

第三步、SpringBoot方式启动容器、测试

添加@EnableRetry注解,启用重试功能

package hello;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ApplicationContext;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import org.springframework.retry.annotation.EnableRetry;

@SpringBootApplication

@EnableRetry

public class Application {

public static void main(String[] args) throws Exception {

ApplicationContext annotationContext = new AnnotationConfigApplicationContext("hello");

RemoteService remoteService = annotationContext.getBean("remoteService", RemoteService.class);

remoteService.call();

}

}

运行结果:

16:50:51.012 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry: count=0

do something…

16:50:51.025 [main] DEBUG org.springframework.retry.backoff.ExponentialBackOffPolicy - Sleeping for 5000

16:50:56.026 [main] DEBUG org.springframework.retry.support.RetryTemplate - Checking for rethrow: count=1

16:50:56.026 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry: count=1

do something…

16:50:56.026 [main] DEBUG org.springframework.retry.backoff.ExponentialBackOffPolicy - Sleeping for 5000

16:51:01.026 [main] DEBUG org.springframework.retry.support.RetryTemplate - Checking for rethrow: count=2

16:51:01.027 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry: count=2

do something…

16:51:01.027 [main] DEBUG org.springframework.retry.support.RetryTemplate - Checking for rethrow: count=3

16:51:01.027 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry failed last attempt: count=3

RPC调用异常

补充

对于非幂等的请求(比如新增,更新操作),千万不要使用重试,对数据一致性会造成很大影响。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java retry_Spring重试支持Spring Retry的方法相关推荐

  1. java retry_Spring异常重试框架Spring Retry详解

    Spring Retry支持集成到Spring或者Spring Boot项目中,而它支持AOP的切面注入写法,所以在引入时必须引入aspectjweaver.jar包. 快速集成的代码样例: @Con ...

  2. 重试组件 Spring Retry

    spring-retry是spring社区的一个成员,它提供了一种对失败操作进行自动重试的能力,可以作为某些瞬时错误(例如短暂的网络抖动)的解决方案. 作为spring生态的一部分,spring-re ...

  3. Spring异常重试框架Spring Retry

    在调用第三方接口或者使用mq时,会出现网络抖动,连接超时等网络异常,所以需要重试.为了使处理更加健壮并且不太容易出现故障,后续的尝试操作,有时候会帮助失败的操作最后执行成功.例如,由于网络故障或数据库 ...

  4. 重试框架Spring retry实践

    spring retry是从spring batch独立出来的一个能功能,主要实现了重试和熔断.对于重试是有场景限制的,不是什么场景都适合重试,比如参数校验不合法.写操作等(要考虑写是否幂等)都不适合 ...

  5. Spring异常重试机制 - Spring Retry

    目录 一 . 引入依赖 二 . 在启用类或业务类上添加@EnableRetry注解启用重试机制(在启用类上添加全局有效 , 在业务类上添加仅当前有效) 三 . 使用@Retryable实现重试 四 . ...

  6. 针对Spring的Spring Retry 我发现了这样一个大家都不知道的技巧!

    外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重试策略重新调用 API 接口来获取.重试策略在服务治理方面也有很广泛 ...

  7. java retry(重试) spring retry, guava retrying 详解

    转载 自 http://blog.51cto.com/9250070/2156431 系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理 ...

  8. java retry 设置上限_java-如何设置Spring Retry模板重试最大尝试次数:无限

    我想用Spring Retry修改数据库连接的创建,以便在应用程序启动时数据库关闭时再试一次.我不想限制重试次数.我应该如何配置策略来做到这一点. 我当前的代码(我知道在这种状态下它限制为100): ...

  9. 高级JAVA - 手写简单的重试组件学习Spring Retry

    目录 一 . 定义注解 二 . 利用cglib代理扩展重试业务 三 . 编写代理类 , 使用自定义的XRetryInterceptor作为拦截器 四 . 编写相关业务方法 , 测试代码 五 . 测试结 ...

最新文章

  1. sap系统前台数据与后台表之间_数据治理之SAP软件非生产数据清除方法
  2. xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
  3. ML之NB:利用NB朴素贝叶斯算法(CountVectorizer/TfidfVectorizer+去除停用词)进行分类预测、评估
  4. 裸奔浏览器_【大数据早报】上网=“裸奔”?单凭浏览器历史记录就能锁定身份...
  5. java环境变量设置 成功_java环境变量设置
  6. EJB3.0 JPQL
  7. 使用JavaScript进行数组去重——一种高效的算法
  8. linux系统更新失败处理功能,Proxmox VE升级apt-get update失败处理 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  9. 精心收集的jQuery常用的插件1000
  10. LeetCode - Merge Two Sorted Lists
  11. js调用局部打印功能并还原
  12. CAS单点登录及处理流程介绍(一)
  13. 网吧服务器记录修改,网吧服务器ip地址修改
  14. 格林公式求圆并的面积及重心
  15. JPEG图像格式解析
  16. 微信红包 php算法,基于PHP微信红包的算法探讨
  17. Java枚举类与注解
  18. 安装linux+windows双系统后无法进入Windows
  19. 转载:不可不知的端午习俗
  20. 微信公众平台支付 一直提示签名认证失败,签名对比正确,却提示签名不正确,关于prepay_id造成签名验证不正确的问题

热门文章

  1. CMDB建设作品:使用Electron构建运维PC客户端
  2. 计算机三级网络技术第二章基础知识总结
  3. 若依vue3框架实现自定义换肤
  4. 人脸识别(1)----百度智能云接入人脸离别识别SDK(离线采集SDK) 开通文字识别服务
  5. 手机图片转pdf?两种方法介绍
  6. TI6678 MSMC关闭Cache方法总结
  7. [BZOJ3572] [Hnoi2014]世界树
  8. PCIE知识点-008:PCIE switch的结构
  9. CountdownLatch(门闩)
  10. ncnn报null pointer dereference异常