带你读懂Spring 事务——事务的传播机制

高手们在线教下,带你读懂Spring 事务——事务的传播机制
最新回答
怕失望

2026-02-23 18:03:09


理解事务传播的关键在于多个方法间的事务管理。在Spring中,当一个事务方法调用另一个方法时,事务如何在两者之间传递,由七种不同的传播行为类型决定,这些类型由Propagation枚举类在@Transactional注解中管理。


Spring中的七种传播行为包括:



  • REQUIRED:默认行为,如果没有当前事务,新建一个;如果已有事务,加入这个事务。例如,当testMain调用事务方法testB,会根据testMain的事务状态决定是新建还是加入。

  • SUPPORTS:如果当前有事务,加入;否则以非事务方式执行。如testB设置为SUPPORTS,若testMain有事务,testB会加入;若无事务,testB以非事务运行。

  • MANDATORY:如有当前事务,加入;无事务则抛异常。如testB设置为MANDATORY,若testMain无事务,调用时会抛出异常。

  • REQUIRES_NEW:总是新建事务,如果已有,挂起。如testB为REQUIRES_NEW,会独立于testMain的事务进行。

  • NOT_SUPPORTED:始终以非事务方式执行,如果有事务,挂起。testB为NOT_SUPPORTED,即使testMain有事务,testB也不会受影响。

  • NEVER:不允许事务,若已有事务则抛异常。testB为NEVER,调用时若已有事务,会抛出异常。

  • NESTED:如果已有事务,嵌套执行;否则像REQUIRED。NESTED下,子事务与父事务相关,父回滚导致子回滚,如testB嵌套在testMain中。


通过理解这些传播行为,我们可以更好地控制事务的执行流程,确保在方法间的调用中保持预期的数据库操作一致性。