mysql-cj-abandoned-connection-cleanup非法访问:此Web应用程序实例已停止

IT 文章4年前 (2022)发布 小编
0 0 0

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

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

解决方案

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

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

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

我们在项目中新建一个名为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 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();
		}
	}
 }

[v_act]提示:[/v_act]@WebListener这个注解相当于在web.xml配置如下内容

 
           com.panziye.listener.ContextFinalizer 

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

ad

AI 工具导航

优网导航旗下AI工具导航,精选全球千款优质 AI 工具集

© 版权声明

相关文章

暂无评论

暂无评论...