public class ApplicationWatch implements ServletContextListener {
private static Logger logger = Logger.getLogger(ArchDataInit.class);
public void contextDestroyed(ServletContextEvent event) {
logger.info("start ApplicationWatch contextDestroyed method");
logger.info("start shutdown thread pool");
if (ArchConstant.executor != null) {ArchConstant.executor.shutdown();}logger.info("end shutdown thread pool");}
上面的这段代码是在servlet级别销毁线程池。
public class DestroyThreadPoolWhenShutApp implements DisposableBean{
private static Logger logger = Logger.getLogger(DestroyThreadPoolWhenShutApp.class);
public void destroy() throws Exception {
logger.info("start ApplicationWatch contextDestroyed method");
logger.info("start shutdown thread pool");
if (ArchConstant.executor != null) {
ArchConstant.executor.shutdown();
}
logger.info("end shutdown thread pool");
}
}
上面的这行代码是在spring级别销毁线程池
<!-- 在关闭应用的时候销毁线程池 --> <bean id="destroyThreadPool" class="com.giantstone.arch.datainit.DestroyThreadPoolWhenShutApp"/>
然后在spring配置文件中创建一个bean级别的销毁bean.
这样是因为,在spring 关闭的时候,它先执行的是bean级别的类,然后再执行它自己的销毁方法(依据文档得知)。