首页 > 其他分享 >PageHelper中的ThreadLocal未清空问题

PageHelper中的ThreadLocal未清空问题

时间:2022-09-20 14:00:19浏览次数:69  
标签:分页 查询 ThreadLocal 线程 清空 日志 PageHelper

起因

前几天运维发现项目中的XXL执行的时候突然报异常,看了一波异常日志,发现XXl中的普通list查询竟然跑到PageHelper中的我写的分页权限过滤器了。正常来说,我只是简单查询,应该不会触发分页操作,但是日志很明显了。

问题分析

因为我大致知道PageHelper的分页机制,就是在当前线程中的ThreadLocal加个分页条件用来做当前分页操作。当时就隐隐感觉ThreadLocal是不是没清啊。
果然往上翻看日志,看到上面的日志,赫然报着列表查询中的创建事务异常,也就是说查询失败。那就很明显了,就是查询时候这条线程中ThreadLocal是不是没清退出返回到tomcat线程池中,然后拿旧线程进行复用的时候,阴差阳错给套到下一条无关的list查询上。

问题解决

随手百度了下,果然看出不少类似的问题。那答案很明显了,既然没清,咱就每次请求退出的时候,清理下ThreadLocal。

public class HeaderInterceptor implements AsyncHandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        PageHelper.clearPage();
    }
}

标签:分页,查询,ThreadLocal,线程,清空,日志,PageHelper
From: https://www.cnblogs.com/zhou-yuan/p/16710809.html

相关文章

  • autocomplete="off"清空输入框
    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前......
  • mybatis-plus修改时将字段(比如备注)的内容清空(取消字段的空值过滤)
     4110次阅读 it • bug及解决方案 2019-12-09这次遇到的是修改问题,我想将备注改为空,或者说把以前的备注删掉。可是mybatisplus已经做了空值过滤,也就是如果你不......
  • mysql怎么清空数据表数据
    MySQL提供了DELETE和TRUNCATE关键字来删除表中的数据。MySQLDELETE关键字在MySQL中,可以使用DELETE语句来删除表的一行或者多行数据。使用DELETE语句从单个......
  • TransmittableThreadLocal和@Async优雅的记录操作日志
    此文主要讲解:如何实现操作记录如何将TransmittableThreadLocal和@Async搭配使用TransmittableThreadLocal阿里的一个开源组件,为了在使用线程池等会池化复用线程的执行......
  • 面试~ThreadLocal
    四种常见的引用强引用---不可回收软引用---内存不足即回收弱引用---发现即回收虚引用---形同虚设,目的是用于对象回收跟踪ThreadLocal1、ThreadLoca是什么ThreadL......
  • linux中快速清空文件内容的几种方法
    linux中快速清空文件内容的几种方法-Leone--博客园 https://www.cnblogs.com/doseoer/p/5966488.html这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的......
  • Spring 中使用自定义的 ThreadLocal 存储导致的坑
    Spring中有时候我们需要存储一些和Request相关联的变量,例如用户的登陆有关信息等,它的生命周期和Request相同。一个容易想到的实现办法是使用ThreadLocal:pub......
  • Linux命令-按照与使用(10)linux清空历史命令(history)
    前言在Linux系统的终端中,默认保存命令执行记录,当执行敏感信息后就需要清除这些痕迹。一、清空当前历史命令history-c该命令可以清空当前登录会话的所有执行命令,但不......
  • 不重启tomcat,清空catalina.out的几种方式
    相信小伙伴们使用tomcat容器部署项目时,都会遇到这个问题尤其是刚上线日志级别一般启动为DEBUG级别时,catalina.out文件过一会就会特别特别大,特别占我们服务器上的磁盘空间......
  • 如何在 Javascript 中清空数组?
    如何在Javascript中清空数组?在使用JavaScript编程时,程序员可能需要在许多情况下将数组设为空,一个非常常见的问题是如何清空数组并删除其所有元素!顺便说一句,这是最受......