测试某个线上功能模块时,反馈某个接口查询结果偶然不一致。
1、查询日志无异常
2、测试环境单机压测接口,结果无差异
3、排查集群服务接口不一致,测试环境保留一个服务,功能测试接口有偶然不一致
4、在操作某块功能后大概率出现接口查询结果不一致情况。增加日志打印,定位到查询sql。仔细查看发现sql带了分页查询,而接口中并没有任何关于分页的代码。
最终结果罪魁祸首是PageHelper的使用有问题。在功能模块的某个接口中,有PageHelper开启了分页,但是条件判断未走查询。最终导致后续某个查询接口分页查询结果异常。
PageHelper 开启分页影响本地线程变量,当开启分页,而分页未消耗,分页会给到下一个使用该线程的查询。
最终把这个无效的开启分页干掉后,查询数据错误再没有出现。如果要分页,一定要保证开启分页被消耗或移除。