小码问答,有问必答!

tomcat关闭的时候报错:web应用程序似乎启动了一个名为[mysql-cj-abandoned-connection-cleanup]的线程,但未停止,可能会造成内存泄漏,怎么办?

具体异常如下:

image.png

JavaEE

收藏

1个回答

我要回答

  • author
    王姐姐 2020-06-05 14:37

    可以做个监听器:

    @WebListener
    public class ContextFinalizer implements ServletContextListener {
    
        private static final Logger logger = LoggerFactory.getLogger(ContextFinalizer.class);
    
        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);
                    logger.warn(String.format("Driver %s deregistered", d));
                } catch (SQLException ex) {
                    logger.warn(String.format("Error deregistering driver %s", d), ex);
                }
            }
    
            AbandonedConnectionCleanupThread.uncheckedShutdown();
    
        }
    }