【发布时间】:2012-07-09 16:42:03
【问题描述】:
我有以下问题:
我需要从 Tomcat 中作为 Web 应用程序的一部分加载的各种类中运行一些清理代码。
清理代码范围从关闭executors 到数据库清理代码。
我尝试并发现(后来得知这是这样记录的):
所有 servlet 和过滤器都将在之前销毁 ServletContextListener 会收到上下文销毁的通知。
因此,这排除了在任何 ServletContextListeners 中运行清理代码。
我将清理代码放在Servlet 的destroy 方法中,但意识到如果客户端不需要使用它,它将永远被加载,因此清理代码在destroy 方法永远不会运行。
所以现在我被卡住了。
例如,在 Web 应用程序中放置清理代码的最佳位置在哪里?如果我把它放在servlet 中,我不能确保客户会使用它,如果我把它放在listener 中,是否为时已晚?
【问题讨论】:
-
我不明白为什么您对在您的 web 应用程序中注册 ServletContextListener 不满意。 servlet 和过滤器首先被销毁有什么问题?您不希望在某些 servlet 仍在工作时进行清理。
-
您究竟需要在“清理”代码中做什么?
-
@dystroy:因为我的类在关机时已经卸载,然后才有机会运行
ServletContextListener中的清理代码。 -
@ThorbjørnRavnAndersen:从关闭
executors到关闭数据库 -
您可以选择实现
DisposableBean或使用destroy-method进行配置。见here。
标签: java tomcat web-applications servlets