Spring中@Transactional与@Retryable注解的交互机制是什么?
事务与重试注解的顺序为何会影响执行逻辑?
一般来说注解顺序不影响功能,但Spring里的事务注解(@Transactional)和重试注解(比如@Retryable)是特例——二者的顺序直接决定了事务和重试的执行边界:
- 要是把事务放在重试的范围内:执行出错时,事务会先回滚、抛出异常,接着Spring才会触发重试,每次重试都会重新开启新事务。
- 要是把重试放在事务的范围内:重试过程中捕获的异常不会触发事务回滚,所有重试步骤都在同一个事务里跑,直到最后执行失败,整个事务才会一起回滚。
另外还有个需要留意的点:如果重试期间数据库配置发生了变更,可能会导致重试逻辑用新配置执行,但初始事务的上下文和新配置不匹配,进而引发其他问题。
内容的提问来源于stack exchange,提问作者Bryan Tan
相关产品推荐
相关产品推荐

