ServletContextListener 使用。web启动监听启动和结束时的调用

来源:互联网 发布:java 变量命名规则 编辑:程序博客网 时间:2024/05/29 14:27
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);              }          }      }  }  


0 1