设置一个监听类在servlet注销的时候实现ServletContextListener中的contextDestroyed方法
具体代码如下
package com.demo.myssm.myspringmvc;
import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
/**
* JDBC监听类
*/
@WebListener
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");
Enumeration<Driver> drivers = DriverManager.getDrivers();
Driver d = null;
try {
while(DriverManager.getDrivers().hasMoreElements()) {
d=DriverManager.getDrivers().nextElement();
DriverManager.deregisterDriver(d);
System.out.println(" 消除数据库连接驱动 --> : Driver "+d+" deregistered");
}
} catch (SQLException ex) {
System.out.println("Error: deregister driver "+d+" exceptionName:"+ex.getClass().getName()+" detail:"+ex.getMessage());
}finally {
System.out.println("jdbc Driver close");
AbandonedConnectionCleanupThread.uncheckedShutdown();
System.out.println("clean thread success");
}
}
}
这里需要注意的是AbandonedConnectionCleanupThread.uncheckedShutdown();这行代码的mysql版本是8.0系列
如果是mysql5.0系列的数据库应该直接调用shutdown方法,则代码行应为AbandonedConnectionCleanupThread.shuthutdown();