如何感知当前是否存在事务

发布于 2022-09-12 23:31:15 字数 43 浏览 22 评论 0

Spring 事务传播需要方法感知到当前是否存在事务,这是如何实现的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝海 2022-09-19 23:31:15

Spring事务管理器(spring-tx)里有个关键的资源容器:TransactionSynchronizationManager,通过ThreadLocal 存储事务相关资源,比如:

A Method -> B Method:

A Method:

  1. begin tx
  2. 绑定事务资源(比如connection) TransactionSynchronizationManager

B Method:

  1. 从TransactionSynchronizationManager查找,是否有绑定的资源
  2. 有就是存在事务,没有就不存在

当然上面介绍的只是基本原理,为了实现嵌套的事务传播(比如独立事务),还需要有挂起(suspend)/恢复(resume)等操作,不过原理也很简单

A Method -> B Method(New TX):

A Method

  1. begin tx
  2. 绑定事务资源(比如connection) TransactionSynchronizationManager

执行 B Method 之前,由于 B 定义为一个新事物,所以此时将 A 事务挂起,方法还没结束,挂起的这个 A 事务数据直接就局部变量就好

B Method

  1. begin tx
  2. ......
  3. commit

B 结束之后回到刚才挂起的位置,对 A 事务进行恢复,然后commit 就完成了

就……这么简单,更多的介绍可以参考我之前写的一篇文章《Spring 的事务管理》

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文