实现了一个 ContextListener
之后,我现在可以愉快地处理contextDestroyed
事件,关闭连接池并刷新缓存等。
最近当我的服务器没有被关闭时,contextDestroyed
被调用了,这让我很惊讶——它似乎是在某个我无法追踪的随机时间调用的。
是否有任何定义的事件或一组触发contextDestroyed
的情况?
当contextDestroyed
被调用时,我应该确保我的所有操作都是可逆的吗?我需要让所有的连接池在destroyed/initialized
周期中幸存下来吗? 我错了以为只有在关闭Tomcat或替换我的war
时才会收到contextDestroyed
吗?
ServletContextListener
。 - christopherServletContext
而不是ServerContext
。尽管当服务器关闭时所有servlet上下文肯定都会被销毁,但这并不意味着servlet上下文不能在其他时间被销毁(例如长时间未使用时)。您使用哪个服务器?您可以通过参数来控制销毁。 - KayamanServlet Lifecycle
允许容器删除上下文,例如回收资源,因此最好检查Tomcat是否允许您控制行为。 - KayamanServletContextListener
。 - OldCurmudgeoncontextDestroyed
。干净地复制一个新的.war文件可以重新启动一切,并且我能够生存下来,因为所有的单例池都会被重新创建。我的问题是,我现在发现我偶尔会得到一个没有静态数据刷新的contextDestroyed
,这会导致各种损坏,甚至需要重新启动Tomcat才能恢复。 - OldCurmudgeon