之前检查生产日志的时候发现过一个奇怪的现象,数据库报错,sql语句错了,有两个limit
这种错误不应该出现在生产日志上,有点惊讶,我都怀疑是不是有成员的代码没有经过测试就发布了
但是当我把sql拿下来查找的时候,却发现报错的代码段,sql是正常的,仅有一个limit,拿去数据库跑
结果也是符合预期的
这让我想到了pagehelper,这个插件的功能是帮助你分页,它会帮你加入limit
我回到业务层去找相应的代码,也没找到分页助手相关的代码,但我还是怀疑是它有问题。
我翻看它的源码,发现了下面的对象,这个线程常量是它所持有的。
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
还有多个线程变量被持有了,用来记录分页相关的信息。
pagehelper会在使用完后将它清除
public static void clearPage() { LOCAL_PAGE.remove(); }
@Override public void afterAll() { //这个方法即使不分页也会被执行,所以要判断 null AbstractHelperDialect delegate = autoDialect.getDelegate(); if (delegate != null) { delegate.afterAll(); autoDialect.clearDelegate(); } clearPage(); }
afterAll方法是在分页的代码里