如何感知当前是否存在事务
Spring 事务传播需要方法感知到当前是否存在事务,这是如何实现的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Spring 事务传播需要方法感知到当前是否存在事务,这是如何实现的呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
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 的事务管理》