ServletContextListener 使用。web啟動監聽啟動和結束時的呼叫
阿新 • • 發佈:2019-02-18
web.xml監聽配置 <!--此監聽是必須的。控制監聽請求作用域spring2.5之後都這樣配置--> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <!-- 下面自定義配置監聽,假如你只想在伺服器啟動和介紹時候呼叫請在這裡配置監聽器 --> <listener> <listener-class>XXXX.ContextDestroyListener</listener-class> </listener> import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Arrays; import java.util.Enumeration; import java.util.List; import java.util.Set; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ContextDestroyListener implements ServletContextListener { private Logger logger = LoggerFactory.getLogger(getClass()); public static final List<String> destoreyzji = Arrays.asList("qa", "qb"); // 初始化時候執行此函式,可以讀取配置什麼可以在這裡寫 @Override public void contextInitialized(ServletContextEvent sce) { //Ignore } // 當銷燬的時候執行此函式 @Override public void contextDestroyed(ServletContextEvent sce) { destroyJDBCDrivers(); destroySpecifyThreads(); } private void destroySpecifyThreads() { final Set<Thread> threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (needManualDestroy(thread)) { synchronized (this) { try { thread.stop(); logger.debug(String.format("Destroy %s successful", thread)); } catch (Exception e) { logger.warn(String.format("Destroy %s error", thread), e); } } } } } private boolean needManualDestroy(Thread thread) { final String threadName = thread.getName(); for (String aaaa : destoreyzji) { if (threadName.contains(aaaa)) { return true; } } return false; } private void destroyJDBCDrivers() { final Enumeration<Driver> drivers = DriverManager.getDrivers(); Driver driver; while (drivers.hasMoreElements()) { driver = drivers.nextElement(); try { DriverManager.deregisterDriver(driver); logger.debug(String.format("Deregister JDBC driver %s successful", driver)); } catch (SQLException e) { logger.warn(String.format("Deregister JDBC driver %s error", driver), e); } } } }