网站蜘蛛抓取,网页设计与制作课程内容,最新新闻热点事件摘抄11月,培训师资格证怎么考Spring-Retry框架是Spring自带的功能#xff0c;具备间隔重试、包含异常、排除异常、控制重试频率等特点#xff0c;是项目开发中很实用的一种框架。
1、引入依赖 坑点#xff1a;需要引入AOP#xff0c;否则会抛异常。 xml
!-- Spring-Retry -- dependency具备间隔重试、包含异常、排除异常、控制重试频率等特点是项目开发中很实用的一种框架。
1、引入依赖 坑点需要引入AOP否则会抛异常。 xml
!-- Spring-Retry -- dependency groupIdorg.springframework.retry/groupId artifactIdspring-retry/artifactId /dependency !-- Spring-AOP -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-aop/artifactId /dependency
2、启动类注解 坑点很容易一时疏忽忘记启动类开启EnableRetry大家别忘了哦。 java
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.retry.annotation.EnableRetry; SpringBootApplication EnableRetry public class SpringRetryDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringRetryDemoApplication.class, args); } }
3、模拟发短信 我们模拟一个发短信功能根据随机数分别作为成功、失败、抛出各种异常的入口。 这里抛出几种异常的目的是为了后面演示出重试注解参数产生的效果。 java
import cn.hutool.core.util.RandomUtil; import lombok.extern.slf4j.Slf4j; /** * p * 短信服务工具类 * /p * */ Slf4j public class SmsUtil { /** * 发送短信 */ public static boolean sendSms() { // 使用随机数模拟重试场景 int num RandomUtil.randomInt(4); log.info([SmsUtil][sendSms] random num {}, num); return switch (num) { case 0 - // 模拟发生参数异常 throw new IllegalArgumentException(参数有误); case 1 - // 模拟发生数组越界异常 throw new ArrayIndexOutOfBoundsException(数组越界); case 2 - // 模拟成功 true; case 3 - // 模拟发生空指针界异常 throw new NullPointerException(); default - // 未成功则返回false false; }; } }
4、Retry应用 我们单独写一个用于重试调用的组件类用于业务类调用。 java
import com.example.springretrydemo.util.SmsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Recover; import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * p * 重试组件 * /p * */ Slf4j Component public class RetryComponent { /** * 重试机制发送短信 */ Retryable( retryFor {IllegalArgumentException.class, ArrayIndexOutOfBoundsException.class}, noRetryFor {NullPointerException.class}, maxAttempts 4, backoff Backoff(delay 2000L, multiplier 2) ) public boolean sendSmsRetry() { log.info([RetryComponent][sendSmsRetry] 当前时间{}, getNowTime()); return SmsUtil.sendSms(); } /** * 兜底方法规则 * 1、超出了最大重试次数 * 2、抛出了不进行重试的异常 */ Recover public boolean recover() { log.info([RetryComponent][recover] 短信发送次数过多请稍后重试); return false; } /** * 获取当前时间 */ private String getNowTime() { return LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)); } } Retryable注解参数说明 Recover注解说明用于兜底当 超出了最大重试次数 或 抛出了不进行重试的异常 时直接执行该注解声明的兜底方法。 总结
Spring-retry框架还是挺实用的但不是万能的。
所以使用这个框架一定要明确好场景再使用我这里不推荐复杂场景下使用因为君子不立于危墙之下。
最后说一句(求关注!别白嫖)
如果这篇文章对您有所帮助或者有所启发的话求一键三连点赞、转发、在看。
关注公众号woniuxgg在公众号中回复笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记回复面试、开发手册、有超赞的粉丝福利