实施ContextListener
后,我现在可以通过关闭连接池和刷新缓存等来愉快地处理contextDestroyed
事件。
最近,当我的服务器没有被关闭时调用contextDestroyed
时,我感到很惊讶 - 这似乎是在某个任意时间我无法追踪的。
是否有任何已定义的事件或一组情况触发contextDestroyed
?
我应该确保在调用contextDestroyed
时我所做的一切都是可逆的吗?我需要让所有游泳池在destroyed/initialized
周期内存活吗?假设Tomcat被关闭或我的contextDestroyed
被替换时我只会得war
,这是错误的吗?
答案 0 :(得分:9)
通过一系列试验和错误测试,我发现在{; 1>}时调用了contextDestroyed()
.WAR
。 如果您遇到问题#3,正如您所建议的那样,我认为最好的做法是安全地(确保不要创建无限循环)调用contextInitialized()
以确保正确地重新创建池。
答案 1 :(得分:3)
请参阅:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html
contextDestroyed(ServletContextEvent sce):接收通知 ServletContext即将被关闭。
即,在Web应用程序被卸载时调用它(例如,您从web-apps文件夹中删除或替换.war文件或使用Tomcat服务器管理器卸载它。)