概述
今天在改代码时遇到一个很诡异的bug,查询数据会几率性的报错,sql会莫名其妙的分页,
后台的业务方法没有添加
PageHelper.startPage(pageNo, pageSize);
然后在网上看了一下也有类似的问题,分页sql类似下面的
SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM (
select TEST_SEQ.nextval from dual
) TMP_PAGE) WHERE ROW_ID <= ? AND ROW_ID > ?
经过排查,该SQL的方法不可能存在分页的逻辑。
故怀疑是PageHelper 的使用,导致的SQL错误。
PageHelper是借助ThreadLocal实现分页功能的。Tomcat 使用的是线程池技术来处理HTTP的请求,当一个请求信息处理完毕后,该线程将被返回到线程池中。下一个请求来,继续从线程池中获取线程来处理。如果放回线程池中的线程的ThreadLocal 存在垃圾数据,那么这个垃圾数据将会对新的请求造成影响。
根据这个思路我去看了一下我自己的业务代码,发现,确实是这样的,
我的页面有一个标包表格,它先去请求了一次后台,由于这个是有分页的,所以就影响到了此页面的下一个请求,导致下一个请求直接报错了。
问题的解决:
添加filter,利用PageHelper.clearPage(), 清楚掉历史线程中的垃圾信息。
造成问题的原因:
部分使用PageHelper 没有使用好,应该严格按照 一个PageHelper.startPage
接着一个Mapper的查询。如果混乱的使用PageHelper就会导致以上问题。
原文链接:https://www.codenong.com/cs106265884
最后
以上就是俊逸草丛为你收集整理的PageHelper 导致 SQL莫名分页的问题处理的全部内容,希望文章能够帮你解决PageHelper 导致 SQL莫名分页的问题处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复