问题
当我们再执行插入操作的时候,马上去查询数据库导致没有查询到数据(我这边插入的2000条数据批量插入)
原因
究其原因,是 数据库事务在作怪,也怪我当初学习的时候只是背了概念,没有深刻的去理解它。当时代码上面有有一个注解@Transactional,看了它的源码,不声明隔离级别时,它是使用数据库默认的隔离级别。我们知道mysql默认的隔离级别时“可重复读” (读未提交——读已提交——可重复读——串行化)。所以就清楚了,当收到第三方的MQ之后,由于之前的事务没有提交,所以当然查不到数据了。
我的这个问题就是事务未提交,但是mysql事务隔离级别是可重复读(那么就是读不到未提交的事务)当我们数据量比较大的时候比较容易出现这个请求,因为事务比较大
解决方案
- 改事务隔离级别为读未提交(不太科学)
- 随机睡眠一会儿(不需要睡太久,一般批量插入2000条比较合适,然后时间大概就在几百毫秒)
- 优化代码逻辑,为啥插入了还要读取(业务控制,实在控制不了方法2比较可取)