虚拟读取和脏读取是初学者最大的陷阱之一,但是可以通过设置事务的隔离级别来管理它们。
您可能会争辩说它们可以由spring-boot控制。因此无需测试。但据我所知,并非所有数据库都支持隔离级别。那么,我们如何在springboot的测试中模拟它们?
答案 0 :(得分:1)
我用 JUnit5 在 SpringBoot 中模拟了脏读、不可重复读、幻读、丢失更新。
测试结果如下
隔离级别 | 脏读 | 不可重复读 | 幻读 | 丢失更新 |
---|---|---|---|---|
默认 | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
READ_UNCOMMITTED | 可能发生 | 可能发生 | 可能发生 | 可能发生 |
READ_COMMITTED | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
REPEATABLE_READ | 没有发生 | 没有发生 | 可能发生 | 没有发生 |
可序列化 | 没有发生 | 没有发生 | 没有发生 | 没有发生 |
隔离级别 | 脏读 | 不可重复读 | 幻读 | 丢失更新 |
---|---|---|---|---|
默认 | 没有发生 | 没有发生 | 可能发生 | 可能发生 |
READ_UNCOMMITTED | 可能发生 | 可能发生 | 可能发生 | 可能发生 |
READ_COMMITTED | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
REPEATABLE_READ | 没有发生 | 没有发生 | 可能发生 | 可能发生 |
可序列化 | 没有发生 | 没有发生 | 没有发生 | 没有发生 |
隔离级别 | 脏读 | 不可重复读 | 幻读 | 丢失更新 |
---|---|---|---|---|
默认 | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
READ_UNCOMMITTED | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
READ_COMMITTED | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
REPEATABLE_READ | 没有发生 | 没有发生 | 没有发生 | 没有发生 |
可序列化 | 没有发生 | 没有发生 | 没有发生 | 没有发生 |
隔离级别 | 脏读 | 不可重复读 | 幻读 | 丢失更新 |
---|---|---|---|---|
默认 | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
READ_UNCOMMITTED | 可能发生 | 可能发生 | 可能发生 | 可能发生 |
READ_COMMITTED | 没有发生 | 可能发生 | 可能发生 | 可能发生 |
REPEATABLE_READ | 没有发生 | 没有发生 | 没有发生 | 可能发生 |
可序列化 | 没有发生 | 没有发生 | 没有发生 | 可能发生 |
您可以在here中参考这个项目。