Java 我应该将清理代码放在web应用程序中的什么位置?
我有以下问题:Java 我应该将清理代码放在web应用程序中的什么位置?,java,tomcat,web-applications,servlets,Java,Tomcat,Web Applications,Servlets,我有以下问题: 我需要从Tomcat中作为web应用程序的一部分加载的各种类中运行一些清理代码。 清理代码范围从关闭执行器到数据库清理代码。 我尝试并发现(并在事后了解到这是有记录的): 所有Servlet和筛选器将在任何 ServletContextListeners会收到上下文破坏的通知 因此,这排除了在任何ServletContextListeners中运行清理代码的可能性 我将清理代码放在Servlet的destroy方法中,但意识到如果客户端不需要使用它,它将永远不会被加载,因此des
我需要从Tomcat中作为web应用程序的一部分加载的各种类中运行一些清理代码。
清理代码范围从关闭执行器到数据库清理代码。
我尝试并发现(并在事后了解到这是有记录的): 所有Servlet和筛选器将在任何 ServletContextListeners会收到上下文破坏的通知 因此,这排除了在任何
ServletContextListeners
中运行清理代码的可能性我将清理代码放在
Servlet
的destroy
方法中,但意识到如果客户端不需要使用它,它将永远不会被加载,因此destroy
方法中的清理代码将永远不会运行。所以现在我被卡住了。
在web应用程序中放置清理代码的最佳位置在哪里?例如,如果我将其放在
servlet
中,我无法确保客户端会使用它,如果我将其放在侦听器中,则为时已晚 如果您可以选择将servlet配置为在启动时加载,则可以解决上述问题
有关示例和一些讨论,请参阅。我不明白您为什么对在Web应用程序中注册ServletContextListener不满意。首先销毁servlet和过滤器有什么问题?您不希望在某些servlet仍在工作时进行清理。在“清理”过程中,您到底需要做什么代码?@dystroy:因为我的类已经在关机时卸载,然后才有机会在ServletContextListener
@Thorbjørnravandersen中运行清理代码:从关机executors
到关闭数据库,您可以选择实现DisposableBean
或配置销毁方法
。看见