确认

  • [X] 我使用的版本是最新版, 并且使用插件确认过项目里无依赖版本冲突
  • [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
  • [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题

当前程序版本

3.5.9

问题描述

只要开启分页拦截器,关闭springboot时就会报堆栈溢出。调用N次分页,关闭时报N个堆栈溢出。

3.5.9 com.baomidou mybatis-plus-spring-boot3-starter ${mybatis-plus.version} com.baomidou mybatis-plus-jsqlparser ${mybatis-plus.version}

@Configuration public class MyBatisPlusConfig { /* * 新增分页拦截器,并设置数据库类型为MYSQL / @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { // 创建拦截器 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 向Mybatis过滤器链中添加分页拦截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }

baseMapper.selectPage(page, wrapper);

详细堆栈日志

1月 16, 2025 10:22:51 上午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["http-nio-8888"]
2025-01-16 10:22:52 [RMI TCP Connection(2)-127.0.0.1] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
2025-01-16 10:22:52 [RMI TCP Connection(2)-127.0.0.1] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
2025-01-16 10:22:52 [RMI TCP Connection(2)-127.0.0.1] FATAL com.codeplat.config.StartStopListener - Spring Boot 准备停止
1月 16, 2025 10:22:52 上午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service [Tomcat]
1月 16, 2025 10:22:52 上午 org.apache.catalina.core.ApplicationContext log
信息: Destroying Spring FrameworkServlet 'dispatcherServlet'
1月 16, 2025 10:22:52 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: The web application [codeplat] appears to have started a thread named [mybatis-plus-jsqlParser-60] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.11/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
 java.base@17.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
 java.base@17.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
 java.base@17.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
 java.base@17.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1625)
 java.base@17.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.11/java.lang.Thread.run(Thread.java:840)
1月 16, 2025 10:22:52 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: The web application [codeplat] appears to have started a thread named [mybatis-plus-jsqlParser-61] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.11/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
 java.base@17.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
 java.base@17.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
 java.base@17.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
 java.base@17.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1625)
 java.base@17.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.11/java.lang.Thread.run(Thread.java:840)
1月 16, 2025 10:22:52 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: The web application [codeplat] appears to have started a thread named [mybatis-plus-jsqlParser-63] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.11/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
 java.base@17.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
 java.base@17.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
 java.base@17.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
 java.base@17.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1625)
 java.base@17.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.11/java.lang.Thread.run(Thread.java:840)

Comment From: nieqiurong

把你的复现步骤写清楚下.

Comment From: nieqiurong

把这个钩子注册下试试.

static {
    Runtime.getRuntime().addShutdownHook(new Thread(()-> JsqlParserGlobal.executorService.shutdown()));
}

Comment From: xxx-tea

@aiteliangliang 看下你的yaml配置文件

Comment From: aiteliangliang

把这个钩子注册下试试.

java static { Runtime.getRuntime().addShutdownHook(new Thread(()-> JsqlParserGlobal.executorService.shutdown())); }

这个不行哎

Comment From: nieqiurong

那你整理个工程出来吧

Comment From: aiteliangliang

那你整理个工程出来吧

工程代码:http://zhengwuban.com:18881/code.zip

Comment From: nieqiurong

1,工程里没看到你的com.codeplat.config.StartStopListener 2,工程里我没有打包成执行jar,这是我自行修改测试的

Image

Comment From: aiteliangliang

感谢大家的帮助。 我定位到了问题的真实原因

今天我换了一个idea测试,没有上面的bug。 关闭springboot时就会报堆栈溢出的问题出现在myeclipse 2024.1.0版本中