首页 > 编程语言 >SpringBoot重试机制:@Retryable注解使用教程

SpringBoot重试机制:@Retryable注解使用教程

来源:互联网 2026-07-26 08:09:30

基于SpringBoot的@Retryable注解通过AOP实现重试机制,需添加依赖并启用@EnableRetry。注解可配置重试次数、退避策略及异常类型,重试失败后由@Recover方法统一处理。需注意不支持类内自调用,重试方法不能有返回值,且异常必须抛出。

当方法调用因网络原因失败时,通常需要一套重试机制作为兜底。最直接的做法是使用 while 循环或在捕获异常后手动处理,但这种方式代码侵入性较强。Spring 框架基于 AOP 提供了 @Retryable 注解来实现重试,零侵入,更加优雅。

基于 Spring Boot 项目使用 @Retryable 注解实现重试

1. 添加依赖

 
            org.springframework.retry
            spring-retry
        

2. 在启动类或配置类上加 @EnableRetry 注解

启用该功能并不复杂,直接添加注解即可:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

@EnableRetry
public class TestApplication {
	public static void main(String[] args) {
		try {
			SpringApplication.run(TestApplication.class, args);
			log.info("[启动成功]");
		}catch (Exception e){
			log.info("[启动失败]:{}",e);
		}
	}
}

3. 创建类,在需要重试的方法上添加注解

  • @RetryablemaxAttempts:最大尝试次数,默认为 3(注意这 3 次包含第一次执行)。
  • backoff:可指定暂停时间,其中 multiplier 为递增指数,当 maxAttempts 大于 2 时生效。
  • value:指定触发重试的异常类型。
    @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
    public void cacheProduct(String productCode) throws Exception {
    }
    // 在指定次数尝试后仍然失败,则由同一类中的 @Recover 注解方法做统一处理(类似全局异常处理)
    // 注意:该方法也不能有返回值
    @Recover
    public void recover(Exception e) {
        logger.warn("减库存失败!!!" + LocalTime.now());
        // 记录日志到数据库
    }

@Retryable 注解使用注意事项

1. 由于基于 AOP 实现,不支持类内部的自调用(即同一类中的方法调用另一个方法,AOP 不会生效)。

2. 如果重试失败后需要由 @Recover 注解的方法做后续处理,那么被重试的方法不能有返回值,必须是 void。否则重试结束后即使失败,也不会被 @Recover 方法处理。

3. 方法内不能使用 try catch 处理异常,即使使用了 catch 也要向外抛出异常,否则重试机制无法感知异常。

SpringBoot重试机制:@Retryable注解使用教程

有读者留言说文章写得有问题,这里贴出测试代码说明。之前提到的“方法所在的类不能是接口的实现类”似乎不成立,后来测试发现可能是 @Recover 注解的方法与重试方法不在同一类中,导致重试完成后未被处理,而直接抛出异常。

4. 如果重试方法有返回值,那么在重试次数用完后仍然失败,也不会被 @Recover 注解的方法处理。

SpringBoot重试机制:@Retryable注解使用教程

5. 如果重试方法中使用 try catch 处理了异常而未抛出,那么重试不会生效——第一次异常被处理后,不会再进行重试。

SpringBoot重试机制:@Retryable注解使用教程

总结

以上是 Spring Boot 中 @Retryable 注解的基本用法和常见陷阱。核心思路很简单:通过注解声明式地控制重试次数、退避策略和异常类型,失败后由 @Recover 统一兜底。但需要注意 AOP 的局限性、返回值类型以及异常处理方式,否则容易踩坑。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。