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
或配置
销毁方法
。看见