web应用程序似乎启动了一个名为[mysql-cj-abandoned-connection-cleanup]的线程,但未停止,可能会造成内存泄漏...
解决方法:设置监听器,在服务器注销的时候运行这句话就不会有问题了。
AbandonedConnectionCleanupThread.uncheckedShutdown();
新建一个监听器,代码如下
import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;
import javax.servlet.*;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration;
@WebListener
public class Listener_My implements HttpSessionListener, ServletRequestListener, ServletContextListener, ServletContextAttributeListener,
ServletRequestAttributeListener, HttpSessionAttributeListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("请求初始化");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("请求销毁");
}
@Override
public void contextInitialized(ServletContextEvent sce){
try{
System.out.println("Servlet初始化");
}catch (Exception e){
System.out.println("初始化失败");
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
try {
System.out.println("Servlet销毁");
// SqlConnection.dbDestroyed();
Enumeration drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
Driver driver = (Driver) drivers.nextElement();
DriverManager.deregisterDriver(driver);
System.out.println("deregistering jdbc driver: " + driver);
}
AbandonedConnectionCleanupThread.uncheckedShutdown();
}catch (Exception e){
e.printStackTrace();
System.out.println("销毁工作异常");
}
}
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
}
@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
}
@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
}
@Override
public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
}
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
}
}
作者: correct
出处:https://www.cnblogs.com/correct/p/16548390.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现