Spring事务管理器(spring-tx)里有个关键的资源容器:TransactionSynchronizationManager,通过ThreadLocal 存储事务相关资源,比如:A Method -> B Method:A Method:begin tx绑定事务资源(比如connection) TransactionSynchronizationManagerB Method:从TransactionSynchronizationManager查找,是否有绑定的资源有就是存在事务,没有就不存在当然上面介绍的只是基本原理,为了实现嵌套的事务传播(比如独立事务),还需要有挂起(suspend)/恢复(resume)等操作,不过原理也很简单A Method -> B Method(New TX):A Methodbegin tx绑定事务资源(比如connection) TransactionSynchronizationManager执行 B Method 之前,由于 B 定义为一个新事物,所以此时将 A 事务挂起,方法还没结束,挂起的这个 A 事务数据直接就局部变量就好B Methodbegin tx......commitB 结束之后回到刚才挂起的位置,对 A 事务进行恢复,然后commit 就完成了就……这么简单,更多的介绍可以参考我之前写的一篇文章《Spring 的事务管理》
Spring事务管理器(spring-tx)里有个关键的资源容器:
TransactionSynchronizationManager
,通过ThreadLocal 存储事务相关资源,比如:A Method -> B Method:
A Method:
B Method:
当然上面介绍的只是基本原理,为了实现嵌套的事务传播(比如独立事务),还需要有挂起(suspend)/恢复(resume)等操作,不过原理也很简单
A Method -> B Method(New TX):
A Method
执行 B Method 之前,由于 B 定义为一个新事物,所以此时将 A 事务挂起,方法还没结束,挂起的这个 A 事务数据直接就局部变量就好
B Method
B 结束之后回到刚才挂起的位置,对 A 事务进行恢复,然后commit 就完成了
就……这么简单,更多的介绍可以参考我之前写的一篇文章《Spring 的事务管理》