行业资讯 2025年08月6日
0 收藏 0 点赞 876 浏览 2303 个字
摘要 :

文章目录 解决方案 最近一个同学的项目在打包部署tomcat后报错如下: [mysql–cj–abandoned–connection–cleanup] org.apache.catalina.loader.……




  • 解决方案

最近一个同学的项目在打包部署tomcat后报错如下:

[mysqlcjabandonedconnectioncleanup] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
java.lang.IllegalStateException: 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1440)
at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1065)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:117)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:84)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

具体类似如图:
mysql-cj-abandoned-connection-cleanup非法访问:此Web应用程序实例已停止
一开始以为这个错是因为打war包出现的问题,因为项目本身在idea开发工具中是能正常启动运行,一点错没有,只是通过maven打成war包部署到云服务器上的tomcat中,一启动到最后就报如上错误,那么这个问题该如何解决呢?

解决方案

先说下网上一种方案,潘老师也试过但好像没用,但还是说明下:
网上这种解决方案是在tomcat的servel.xmlContext标签中加个reloadable=\"false\"属性,其实默认配置里好像没有这个标签,可能用eclispe部署或者idea部署进去才会有,我自己手工加了这个标签,没有能解决问题。

下面是重点,通过如下方法,确实解决了该问题,只需如下操作即可:

我们在项目中新建一个名为ContextFinalizer的监听类,具体代码如下:

package com.panziye.listener;
import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

@WebListener
public class ContextFinalizer implements ServletContextListener{

    public void contextInitialized(ServletContextEvent sce) {}

    public void contextDestroyed(ServletContextEvent sce) {
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        Driver d = null;
        while (drivers.hasMoreElements()) {
            try {
                d = drivers.nextElement();
                DriverManager.deregisterDriver(d);
            } catch (SQLException ex) {
            }
        }
        try {
            // 注意:mysql8版本的jar好像shutdown方法私有了,只能调用checkedShutdown或uncheckedShutdown
            AbandonedConnectionCleanupThread.checkedShutdown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 }

提示:

@WebListener这个注解相当于在web.xml配置如下内容

 <listener>
          <listener-class> com.panziye.listener.ContextFinalizer </listener-class>
</listener>

然后我们再去打包部署,运行tocmat,发现就不报错了,mysql-cj-abandoned-connection-cleanup非法访问:此Web应用程序实例已停止的问题成功解决。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/8242.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

516
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号