@Override public void contextDestroyed(ServletContextEvent sce) { logger.info("destroyed DefaultContextListener."); try { // 关闭线程池 AppExecutors.getScheduledExecutor().shutdown(); AppExecutors.getTaskPoolExecutor().shutdown(); if (AppExecutors.getScheduledExecutor().awaitTermination(5, TimeUnit.SECONDS)) { logger.info("success shutdown scheduled pool excutor."); } else { logger.error("failed shutdown scheduled pool excutor."); AppExecutors.getScheduledExecutor().shutdownNow(); } if (AppExecutors.getTaskPoolExecutor().awaitTermination(5, TimeUnit.SECONDS)) { logger.info("success shutdown task pool excutor."); } else { logger.error("failed shutdown task pool excutor."); AppExecutors.getTaskPoolExecutor().shutdownNow(); } } catch (Exception e) { if (!AppExecutors.getTaskPoolExecutor().isShutdown()) { AppExecutors.getTaskPoolExecutor().shutdownNow(); } if (!AppExecutors.getScheduledExecutor().isShutdown()) { AppExecutors.getScheduledExecutor().shutdownNow(); } logger.error("catch exception when destroyed DefaultContextListener."); e.printStackTrace(); } finally { // 关闭阿里云服务客户端 SystemConfig.getOtsTagClient().shutdown(); SystemConfig.getOtsSharedClient().shutdown(); SystemConfig.shutDownOSSClient(); SystemConfig.closeMnsClient(); RedisPool.closeAll(); RedisLogAppender.closeAll(); WechatBasicHelper.destroy(); JerseyClientManager.destroy(); } }