何时调用上下文已破坏?

2022-09-03 02:30:27

在实现了之后,我现在可以通过关闭连接池并刷新缓存等来愉快地处理事件。ContextListenercontextDestroyed

最近,当我的服务器没有关闭时,我被调用时感到惊讶 - 它似乎是在某个我无法追踪的任意时间。contextDestroyed

是否有任何定义的事件或一组情况触发 ?contextDestroyed

我是否应该确保在调用时我所做的一切都是可逆的?我需要让我所有的游泳池在一个周期中存活下来吗?我是否错误地认为我只会在Tomcat被关闭或我的被替换时才能获得一个?contextDestroyeddestroyed/initializedcontextDestroyedwar


答案 1

通过一系列的试错测试,我发现那是在什么时候叫的;contextDestroyed()

  1. 正在更新/删除服务器。.WAR
  2. 由于管理员干预,服务器已关闭。
  3. 服务器由于编码错误而关闭。会终止非服务器应用程序终止的内容。

如果您遇到问题#3,正如您所建议的那样,我认为最好的做法是安全地(确保不要创建无限循环)调用以确保正确重新创建池。contextInitialized()


答案 2

请参见: http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html

contextDestroyed(ServletContextEvent sce):接收 ServletContext 即將要關閉的通知。

也就是说,当Web应用程序被卸载时(例如,您从Web应用程序文件夹中删除或替换.war文件或使用Tomcat服务器管理器卸载它)时,它会被调用。


推荐