You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Retry未触发重试问题排查:依赖版本冲突及异步事务场景

原因分析
  • Spring Retry版本冲突:项目同时引入1.1.2-RELEASE和1.2.4-RELEASE两个版本,不同版本的注解处理器、切面逻辑存在兼容性问题,导致重试切面无法正确织入目标方法,或织入后执行逻辑异常,直接造成重试机制失效。
  • @Async与@Retryable切面顺序问题:默认情况下@Async切面优先级高于@Retryable,当两个注解同时标记在方法上时,异步切面先完成织入,方法执行被提交到异步线程池,重试切面无法作用于实际异步执行的方法,最终重试不触发。
  • 事务注解的潜在干扰:@Transactional与@Retryable共存时,若事务切面优先级干扰了重试切面的织入,或重试过程中事务边界未正确重置,也会导致重试逻辑无法正常执行。
解决方案
  • 统一Spring Retry依赖版本:在项目POM中主动声明1.2.4-RELEASE版本,并排除其他依赖引入的低版本spring-retry:
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.2.4.RELEASE</version>
</dependency>

<!-- 示例:排除其他依赖中的低版本spring-retry -->
<dependency>
    <groupId>xxx</groupId>
    <artifactId>xxx-dependency</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 调整注解顺序与切面优先级:将@Retryable放在@Async之前,确保重试切面先完成织入;或者通过@Order注解指定重试切面优先级高于异步切面(异步切面默认优先级为Ordered.HIGHEST_PRECEDENCE,重试切面可设置为Ordered.HIGHEST_PRECEDENCE - 1):
// 调整注解顺序示例
@Retryable(maxAttempts = 3, value=Exception.class, backoff = @Backoff(delay = 10000))
@Async
@Transactional
public void doAsyncJob(Long paymentId, Map<String, String> params) {
    // 方法业务逻辑
}
  • 优化事务与重试边界:如果重试需要独立事务,可将@Transactional移至方法内部的具体业务逻辑方法上,或设置事务传播行为为Propagation.REQUIRES_NEW,确保每次重试都开启新事务:
@Retryable(maxAttempts = 3, value=Exception.class, backoff = @Backoff(delay = 10000))
@Async
public void doAsyncJob(Long paymentId, Map<String, String> params) {
    doTransactionalJob(paymentId, params);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
private void doTransactionalJob(Long paymentId, Map<String, String> params) {
    // 实际业务逻辑
}
  • 验证异常捕获范围:确认抛出的异常属于@Retryable指定的value范围(当前配置为Exception.class,RuntimeException属于其子类,无需调整,但需确保异常未被重试切面之前的其他处理器拦截)。

内容的提问来源于stack exchange,提问作者Eljah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:39