@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(); } }
@Override public void contextInitialized(ServletContextEvent sce) { try { SystemConfig.initParam(); TagOperationHelper.setOtsClient(SystemConfig.getOtsTagClient()); OtsUserHelper.setOtsClient(SystemConfig.getOtsSharedClient()); UserOperationHelper.setOtsClient(SystemConfig.getOtsSharedClient()); // 初始化Redis连接池 RedisPool.initRedisPool(); RedisLogAppender.init(); WechatConfig.initParam(); PublicAccountFactory.initConfig(); TemplateFactory.initConfig(); // 初始化freemarker initFreeMarker(sce); GeoLocationHelper.init(); // 同步微信access token 定时任务 AppExecutors.getScheduledExecutor() .scheduleAtFixedRate( new RefreshAccessTokenTask(), getRefreshWechatTokenScheduledInitDelay(), WechatConstants.refreshTokenTaskPeriod, TimeUnit.MILLISECONDS); // 同步活动定时任务 AppExecutors.getScheduledExecutor() .scheduleAtFixedRate(new SyncMessageThread(), 5, 60, TimeUnit.SECONDS); // 处理标签和用户锁线程 AppExecutors.getScheduledExecutor() .scheduleAtFixedRate(new EtraceSelfMessageThread(), 10, 60, TimeUnit.SECONDS); } catch (Throwable e) { e.printStackTrace(); } }