0

我正在尝试理解和使用 spring 事务隔离级别。我需要最大化我的应用程序的并发性,我只需要小心脏读。幻读等场景真的是不用管的。因此决定将Isolation.READ_COMMITTED用于我的应用程序中最常用的事务方法之一。根据春季文档:

此级别仅禁止事务读取其中包含未提交更改的行。

所以这是我所面临的情况,我认为与上述陈述略有不同。

关键方法(customeId):

  1. 从 table1 中读取客户的数据
  2. 做一些决定
  3. 在 table1 中为该客户添加一个新行
  4. 进行一些长时间的处理......

因此,当为两个完全独立的客户 c1 和 c2 并行调用此方法时,如果 c1 的方法在调用 c2 的方法时位于第 4 步。因此,我在步骤 1 中对 c2 块的方法调用对 c1 的 util 方法调用完成。

我用eclipse调试模拟了这个场景。我可以从表 1 上的数据库端为客户 c2 查询数据。根据上面的 spring 文档,我的第二个方法调用不应该被阻塞。

我错过了什么吗?

这是我的技术栈:

  • 爪哇:8
  • 弹簧:4.3.7
  • 数据库:SqlServer 2012
  • ORM:Mybatis 3.4.2
  • mybatis 春季版:1.3.1
4

0 回答 0