一、问题现场
这里对原有的业务逻辑进行简化,简化后的代码实现如下:
// 更新
templateMapper.update(template);
//查询
templateMapper.getTemplateList(pageNo, pageSize);
//sql代码
select * from template
where status = "enable"
order by create_time desc limit #{pageNo},#{pageSize};
二、定位问题
- 定位问题
遇到问题的第一时间是去查看了一下数据库是不是更新出了问题,但是查询之后发现数据确实是更新了
接着再去查看了一下当时机器的网络问题,并没有报数据库连接异常等问题。
数据库异常问题和网络抖动问题基本可以排除; - 复现问题
每次新增操作后都能复现查不到最新一条数据的问题,等多久都一样; - 上网找解决方案
网上类似更新后查询不到数据的原因大致有以下3类:
入参有空格导致;
读取本地缓存导致;
事务隔离性导致; - 结合自身场景排查
我除了分页参数以外根本没有入参,不可能是入参导致,第一项排除;
本地缓存配置:MyBatis一级缓存,不存在读取不到新增数据的情况;
update和select在两个方法中实现,中间间隔时间很久,所以也不存在事务没