Spring 事务隔离级别
事务并发: 在java Spring中比较常见的就是 @Transactional 注解的方法被多个线程同时执行,或者多个 @Transactional 注解的方法操作相同的数据,并且这些方法被同时执行。
事务并发会出现三种比较常见的问题,分别是脏读、不可重复读、幻读。
我们要在spring环境下验证以下问题时,有几个地方要特别注意
(1)junit中 @Transactional 是会自动回滚的,我们要在@Test 方法上加上 @Commint 注解
(2)mybatis有缓存机制,我们要关闭一级缓存,具体方法如下
假设有以下场景,小红和小明是夫妇,他们用的是同一张银行卡。银行卡中余额为1000元。
脏读:
时间 | 小明 | 小红 |
---|---|---|
t1 | 小明花费银行卡中的100元 | |
t2 | 小红查询银行卡中的余额 900元 |