首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring事务控制的进一步理解

关于事务,之前只是大概知道什么原子性,回滚等概念,因为在项目实践中几乎不会手动去控制事务,所以对其的理解一直很浅,直到之前排查问题的时候才进一步地了解了下。

在实际项目中,利用Spring管理事务的时候可以利用配置文件声明的方式来控制事务传播属性,例如下面几个:

PROPAGATION_REQUIRED

PROPAGATION_REQUIRES_NEW

PROPAGATION_SUPPORTS

实际上一共有7中配置,各自配置如下事务属性详解:

PS:注意!这个配置将影响数据存储,必须根据情况选择。

下面来结合实际例子理解一下其中的意思:

假设一个场景:我们在methodA中开启了一个事务A,并且在这个事务A中对USER表进行了数据的修改,比如把USER.NAME从JONZ改成了TOM,然后又调用了methodB对USER表的数据进行查询,结果会是怎样呢?

1、如果methodA和methodB的传播属性都是配置成PROPAGATION_REQUIRED

那么!

在methodB中查询到的USER.NAME就会是TOM,也就是在methodA中进行修改后的数据。(未提交事务之前的数据是保存在缓存里的?)

2、如果methodA和methodB的传播属性都是配置成PROPAGATION_REQUIRES_NEW,

或者methodA是PROPAGATION_REQUIRED而methodB是PROPAGATION_REQUIRES_NEW

那么!

在methodB中查询到的USER.NAME将会是JONZ,

因为methodB开启了一个新的事务,然后methodA的事务被挂起未进行commit,导致数据库里的USER.NAME还未进行更新,也就会导致mwthodB查到的会是旧数据。

emmmm因为网上大部分讲事务传播的文章都是在讲事务回滚的,这边我就不多说了,本文摘自平常的工作笔记,有错误的地方帮忙留言指正哈~

PPPPPS:配图啥的还不太会弄,随便用的电脑壁纸,莫介意。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G0RHML00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券