1、問題記錄
首先是啟動項目tomcat碰到了這個問題
嚴重: The web application [/cctcloud] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
中文錯誤就是
嚴重:web應用程序[/cctcloud]注冊了JDBC驅動程序[網址:com.alibaba.druid.proxy.DruidDriver]但在web應用程序停止時未能注銷它。為了防止內存泄漏,JDBC驅動程序已被強制注銷。
2、錯誤原因
由於idea沒有將修改后的jar發布出去
3、解決方法
方法一:手動配置監聽器,用來在Tomcat關閉時取消注冊JDBC驅動程序,並將線程停止
①編寫自定義監聽器
package com.ssm.util; import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.sql.DriverManager; import java.sql.SQLException; public class MyContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("webService start"); } @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("webService stop"); try { while(DriverManager.getDrivers().hasMoreElements()) { DriverManager.deregisterDriver(DriverManager.getDrivers().nextElement()); } System.out.println("jdbc Driver close"); AbandonedConnectionCleanupThread.checkedShutdown(); System.out.println("clean thread success"); } catch (SQLException e) { e.printStackTrace(); } } }
②在web.xml中注冊監聽器
<listener> <listener-class>com.ssm.util.MyContextListener</listener-class> </listener>
方法二:
Ctrl+Alt+Shift+S彈出Project Structure窗口,在Artifacts選項到Output Layout標簽中找到Available Elements,
右鍵點擊Put into Output Root,執行后,在WEB-INF會增加lib目錄,里面是項目引用的jar包,點擊OK。再次部署應用就能成功運行了。
運行結果