Browse Source

在容器关闭时,增加函数处理关闭资源的功能:启动程序、Redis的线程池、自建的线程池

xian 4 years ago
parent
commit
6a4ca54f08

+ 4 - 0
watero-common-tool/src/main/java/com/iamberry/redis/RedisUtils.java

@@ -217,4 +217,8 @@ public class RedisUtils {
             jedis.close();
         }
     }
+
+    public static void colsePool() {
+        pool.close();
+    }
 }

+ 61 - 0
watero-rst-web/src/main/java/com/iamberry/rst/filters/CloseApplicationContextListener.java

@@ -0,0 +1,61 @@
+package com.iamberry.rst.filters;
+
+import com.iamberry.redis.RedisUtils;
+import com.iamberry.rst.controllers.order.AdminSalesOrderController;
+
+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;
+import java.util.Set;
+
+@WebListener
+public class CloseApplicationContextListener implements ServletContextListener {
+
+    @Override
+    public void contextInitialized(ServletContextEvent servletContextEvent) {
+
+    }
+
+    @Override
+    public void contextDestroyed(ServletContextEvent sce) {
+        AdminSalesOrderController.THREAD_POOL.shutdown();
+        RedisUtils.colsePool();
+        destroyJDBCDrivers();
+    }
+
+    /**
+     * 销毁线程
+     */
+    private void destroySpecifyThreads() {
+        final Set<Thread> threads = Thread.getAllStackTraces().keySet();
+        for (Thread thread : threads) {
+            synchronized (this) {
+                try {
+                    thread.interrupt();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    /**
+     * 这里是反注册驱动
+     */
+    private void destroyJDBCDrivers() {
+        final Enumeration<Driver> drivers = DriverManager.getDrivers();
+        Driver driver;
+        while (drivers.hasMoreElements()) {
+            driver = drivers.nextElement();
+            try {
+                DriverManager.deregisterDriver(driver);
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}