详解spring boot使用@Retryable来进行重处理
作者:wangkang80 发布时间:2021-07-11 18:34:11
标签:spring,boot,retryable
前言
什么时候需要重处理?
在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败,调用远程服务失败,争抢锁失败,等等,这些错误可能是因为网络波动造成的,等待过后重处理就能成功.通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码.然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能.
思路
使用@Retryable和@Recover实现重处理,以及重处理失后的回调
实现
1.pom引用
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
2.应用启动类开启retry
....其他注解
@EnableRetry
public class BaseApplication {
.......
}
3.在指定方法上标记@Retryable来开启重试
@Retryable(value={A异常.class,B异常.class},
maxAttempts=重试次数,
backoff = @Backoff(value = 每次重试延迟毫秒数))
public Integer retry() {
LOGGER.info("测试retry");
final int a = 5;
int num = new SecureRandom().nextInt();
if (num % a == 0) {
return num;
}
throw new RetryException("重试失败");
}
4.在指定方法上标记@Recover来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中)
@Recover
public void recover(A异常 e) {
// ... do something
}
@Recover
public void recover(B异常 e) {
// ... do something
}
结束
演示了单spring boot的应用的,在后续的cloud场景中,如:zuul,等组件,都会涉及到重处理,会在后续的章节中讲解
来源:https://my.oschina.net/wangkang80/blog/912941


猜你喜欢
- LiveData简介在日常安卓开发中,一些耗时的 * 如列网络请求,数据库读写都不能在主线程执行,必须开一条子线程去执行这些耗时操作,但我们往
- 在java中读取读取文件,经常因为路径的问题找不到,此文用于记录如何定位文件的简单方法。本基于springboot做的测试,主要是构建工程方
- Java goto语句妙用今天和朋友聊天的时候,无意间聊到了 goto 语句,但是在 Java 中, goto 是保留关键字,但是朋友说 J
- Caffeine和Spring Boot集成Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将
- Select Count(*)的返回值类型<select id="queryAlarmStatisticalAnalysis
- android新特性页面,ViewPager拖拽到最后一页再拖拽打开其他Activity.实现的方式有很多,效果比较好的就是到了
- 目录规则(来自百度百科,康威生命游戏词条)控制台实现的关键接口代码实现规则(来自百度百科,康威生命游戏词条)游戏开始时,每个细胞随机地设定为
- 在java的开发学习中,可能需要想了解class文件对应的代码内容是什么,如果我们使用IDE工具,可以通过IDE工具的各种反编译插件去进行反
- java 数据类型:在Java中,数据类型分为两大种:基本数据类型(值类型)和包装类型(引用数据类型)。基本数据类型不是对象,不能调用toS
- 话不多说,先上图 &n
- static和@Component遇到的bug今天在编写util的时候,发现不能调用到工具类里面的方法,转眼一看,原来不是工具类里面的方法是
- 1、多态性多态性是面向对象的最后一个特征,它本身主要分为两个方面:方法的多态性:重载与覆写1 重载:同一个方法名称,根据参数类型以及个数完成
- 前言本章内容主要研究一下java高级特性-反射、android注解、和 * 的使用,通过了解这些技术,可以为了以后实现组件化或者Api h
- Unity OnOpenAsset在Unity中,OnOpenAsset是一个非常有用的回调函数,它可以在用户双击资源文件时自动打开一个编辑
- 本篇介绍在SpringBoot中配置Email服务的具体步骤,以及常见的异常分析。 具体案例以QQ邮箱以及QQ企业邮箱为例。QQ邮箱发送方式
- 本文实例讲述了Java二叉搜索树基础原理与实现方法。分享给大家供大家参考,具体如下:前言:本文通过先通过了解一些二叉树基础知识,然后在转向学
- 项目中常用到的圆形进度条有好多个,从网上搜到的自定义进度条多是封装的比较好的代码,但是不利于初学者,现在本博客就教给大家如何一步步实现自定义
- 前言自己android开发也有些年头了,每每回想起作为初学者的时候自己写的代码,自己会有种喷自己的冲动,代码写的太渣了。因此想着自己要总结下
- 前言本文章主要讲解控制流程:块作用域、条件语句、switch语句,篇幅不大,通俗易记。块作用域在深入学习控制结构前,须先了解块的作用。定义:
- Handler是用于操作线程内部的消息队列的类。这有点绕,没关系,我们慢慢的来讲。前面Looper一篇讲到了Looper是用于给线程创建消息