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

Spring AOP注解处理顺序:@Transactional与@SchedulerLock谁先执行?

@Transactional与@SchedulerLock的执行顺序分析

这两个注解的执行顺序并非随机,而是由它们对应的Spring AOP切面的优先级(@Order值)决定的,和注解在方法上的书写顺序无关。

  • 核心逻辑:Spring AOP中,切面的@Order值越小,优先级越高,会先执行环绕通知的前置逻辑,后执行后置逻辑。
  • @Transactional的默认切面优先级是Integer.MAX_VALUE(最低优先级),Spring设计它为最低优先级,是为了让事务能包裹住所有其他切面的业务逻辑。
  • @SchedulerLock(以Redisson实现为例)的默认切面优先级通常是-1(远高于事务切面),所以默认情况下会先执行锁的获取逻辑,再开启事务,执行完业务后先提交事务,再释放锁。

如果需要明确控制顺序,建议手动指定切面的优先级:

  • 若要确保锁在事务前执行,给SchedulerLock的切面设置比Integer.MAX_VALUE小的@Order值(比如@Order(1))。
  • 若特殊场景需要先开事务再锁,调整事务切面的@Order值为更小的数值(不推荐,可能引发并发事务问题)。

注意:如果先开启事务再获取锁,可能出现多个线程同时进入事务,之后才竞争锁的情况,容易导致脏数据或事务回滚异常,通常推荐先锁后事务的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:22:03