spring-retry

每当软件组件相互通信时,就有可能出现暂时的自我纠正错误。 这些故障包括服务的暂时不可用,网络连接的瞬时丢失或服务繁忙时出现的超时。 在这种情况下,适当的重试处理可以减少这些故障可能引起的问题。

在这篇文章中,我们将看到如何使用Spring Retry向Spring应用程序添加健壮的重试逻辑。 Spring Retry可能不是很了解,因为它没有在Spring文档概述中列出。 但是,您可以在Spring Initializr页面上找到它。

建立

要使用Spring Retry,我们需要在项目中添加以下依赖项:

<dependency><groupid>org.springframework.retry</groupid><artifactid>spring-retry</artifactid><version>1.1.2.RELEASE</version>
</dependency>

Spring Retry使用AOP,因此请确保Spring AOP可用:

<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>

如果您使用的是Spring Boot ,那么可以改用spring-boot-starter-aop:

<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-aop</artifactid>
</dependency>

要启用Spring Retry,我们只需要将@EnableRetry添加到我们的应用程序配置类中:

@EnableRetry
@SpringBootApplication // or @Configuration if you are not using Spring Boot
public class RetryExampleApplication {// ...
}

使用批注添加重试处理

现在,我们准备向方法添加重试处理。 为此,我们仅需使用@Retryable注释适当的方法:

@Service
public class MyService {@Retryablepublic void simpleRetry() {// perform operation that is likely to fail}
}

带有@Retryable注释的方法可以像其他任何方法一样调用。 但是,每当可重试方法的执行因异常而失败时,Spring都会自动重试多达三遍。 默认情况下,Spring在方法调用之间使用1秒的延迟。 请注意,调用线程在重试处理期间会阻塞。

重试行为可以通过多种方式自定义。 例如:

@Service
public class MyService {@Retryable(value = {FooException.class, BarException.class}, maxAttempts = 5)public void retryWithException() {// perform operation that is likely to fail}@Recoverpublic void recover(FooException exception) {// recover from FooException}
}

在这里,我们告诉Spring仅在抛出FooException或BarException类型的Exception时应用重试处理。 其他异常不会导致重试。 maxAttempts = 5告诉Spring如果失败,最多重试该方法5次。

使用@Recover,我们为FooException定义了单独的恢复方法。 当可重试的方法因FooException而失败时,这使我们可以运行特殊的恢复代码。

使用RetryTemplate添加重试处理

除了注释之外,Spring Retry还提供了RetryTemplate,可用于在Java代码中定义重试处理。 与其他任何bean一样,可以在我们的配置类中简单地配置RetryTemplate:

@EnableRetry
@SpringBootApplication // or @Configuration if you are not using Spring Boot
public class RetryExampleApplication {@Beanpublic RetryTemplate retryTemplate() {SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();retryPolicy.setMaxAttempts(5);FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();backOffPolicy.setBackOffPeriod(1500); // 1.5 secondsRetryTemplate template = new RetryTemplate();template.setRetryPolicy(retryPolicy);template.setBackOffPolicy(backOffPolicy);return template;}// ...
}

RetryPolicy确定何时应重试操作。 SimpleRetryPolicy是一个RetryPolicy实现,可重试固定次数。

BackOffPolicy是一个策略接口,用于控制重试尝试之间的退避。 在继续之前,FixedBackOffPolicy会暂停一段固定的时间。 其他一些默认的BackOffPolicy实现是ExponentialBackOffPolicy(增加每次重试的退避时间)或NoBackOffPolicy(重试之间没有延迟)。

现在,我们可以将RetryTemplate注入我们的服务。 要使用重试处理来运行代码,我们只需调用RetryTemplate.execute():

@Service
public class RetryService {@Autowiredprivate RetryTemplate retryTemplate;public void withTemplate() {retryTemplate.execute(context -> {// perform operation that is likely to fail});}// ...
}

RetryTemplate.exeucte()以RetryCallback <T,E>作为参数。 RetryCallback是一个功能接口,因此可以使用Java 8 Lambda表达式来实现(如上所示)。

摘要

Spring重试提供了一种向Spring应用程序添加重试处理的简便方法。 可以使用批注(@Retryable和@Recover)或通过将RetryCallback传递给RetryTemplate来添加重试处理。

  • 您可以在GitHub上找到完整的示例源代码。

翻译自: https://www.javacodegeeks.com/2016/03/retry-handling-spring-retry.html

spring-retry

spring-retry_使用Spring-Retry重试处理相关推荐

  1. foxmail邮件加载失败重试_java retry(重试) spring retry, guava retrying 详解

    系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理:实现一个按条件,查询用户信息的服务. 小明:好的.没问题. 代码 UserServi ...

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

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

  3. Spring Retry 重试机制实现及原理

    概要 Spring实现了一套重试机制,功能简单实用.Spring Retry是从Spring Batch独立出来的一个功能,已经广泛应用于Spring Batch,Spring Integration ...

  4. Spring Boot 整合——Spring batch重试和回滚

    关于版本 依赖 版本 springboot 2.4.0 spring batch 2.4.0 代码地址 因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码.全部的 ...

  5. Spring Boot中使用Spring-Retry重试框架

    文章目录 Spring Boot中使用Spring-Retry重试框架 Maven依赖 注解使用 开启Retry功能 注解`@Retryable` 注解`@Recover` 注解`@CircuitBr ...

  6. Spring干货汇总(含Spring Boot与Spring Cloud)

    周末抽空对本号推送的Spring相关内容做个汇总整理(包括spring boot.spring cloud等),方便大家查阅. Spring Boot专题 基础入门内容 SpringBoot快速入门 ...

  7. 基于Spring Boot和Spring Cloud实现微服务架构学习--转

    原文地址:http://blog.csdn.net/enweitech/article/details/52582918 看了几周spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习 ...

  8. 基于 Spring Boot 和 Spring Cloud 实现微服务架构

    前言 首先,最想说的是,当你要学习一套最新的技术时,官网的英文文档是学习的最佳渠道.因为网上流传的多数资料是官网翻译而来,很多描述的重点也都偏向于作者自身碰到的问题,这样就很容易让你理解和操作出现偏差 ...

  9. 基于Spring Boot和Spring Cloud实现微服务架构学习

    目录 Spring 顶级框架 Spring cloud子项目 WHAT - 什么是微服务 微服务简介 微服务的具体特征 SOA vs Microservice HOW - 怎么具体实践微服务 客户端如 ...

  10. 基于Spring Boot和Spring Cloud实现微服务架构

    |来源:龙果学院 |链接:https://www.roncoo.com/article/detail/132858 前言: 首先,最想说的是,当你要学习一套最新的技术时,官网的英文文档是学习的最佳渠道 ...

最新文章

  1. postman+Newman初步使用
  2. MFC获得主窗体和父窗体指针
  3. VTK:隐藏线移除用法实战
  4. 【最近公共祖先】[COCI]STOGOVI
  5. Windows Server 2016提供Docker原生运行的企业级支持
  6. Log4j框架配置文件
  7. npm工具运行Vue项目
  8. tshark/wireshark/tcpdump实战笔记(更新中...)
  9. Linux内核4.14 LTS发布:那些最新最好的功能特性
  10. 机器学习在各个领域的实际应用
  11. 集成百度做敏感词鉴定
  12. 20191101(33) 针对 RT-Thread 下 ADS1256 移植说明(SPI)
  13. @ELK集群环境部署搭建
  14. Ae 效果快速参考:抠像
  15. AI动物识别专家系统-实验报告
  16. vf省计算机考试题库,四川省33次计算机等级考试vf笔试题(含答案).
  17. 自己动手写H3C校园网登录客户端(Linux平台版)
  18. crc16校验c语言单片机实现,三种常用的CRC16校验算法的C51程序的优化
  19. Java——将一个正整数分解质因数
  20. 如何宣传Android作为Bluetooth LE外围设备

热门文章

  1. YbtOJ-选点构形【欧拉函数】
  2. P4321-随机漫游【状压dp,数学期望,高斯消元】
  3. P3708-koishi的数学题【差分】
  4. jzoj3792,P2062-分队问题【贪心】
  5. 2725. [Violet 6]故乡的梦(删边最短路同[TJOI2012]桥)
  6. The table(CF226D)
  7. 【二分】【最小生成树】公路修建问题(P2323)
  8. GDKOI2021总结
  9. 练习利用LSTM实现手写数字分类任务
  10. 可能是最全面的 Java G1学习笔记