我正在尝试理解和使用 spring 事务隔离级别。我需要最大化我的应用程序的并发性,我只需要小心脏读。幻读等场景真的是不用管的。因此决定将Isolation.READ_COMMITTED用于我的应用程序中最常用的事务方法之一。根据春季文档:
此级别仅禁止事务读取其中包含未提交更改的行。
所以这是我所面临的情况,我认为与上述陈述略有不同。
关键方法(customeId):
- 从 table1 中读取客户的数据
- 做一些决定
- 在 table1 中为该客户添加一个新行
- 进行一些长时间的处理......
因此,当为两个完全独立的客户 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