【问题标题】:Where should I place clean up code inside a web application?我应该将清理代码放在 Web 应用程序中的什么位置?
【发布时间】:2012-07-09 16:42:03
【问题描述】:

我有以下问题:
我需要从 Tomcat 中作为 Web 应用程序的一部分加载的各种类中运行一些清理代码。
清理代码范围从关闭executors 到数据库清理代码。
我尝试并发现(后来得知这是这样记录的):

所有 servlet 和过滤器都将在之前销毁 ServletContextListener 会收到上下文销毁的通知。

因此,这排除了在任何 ServletContextListeners 中运行清理代码。
我将清理代码放在Servletdestroy 方法中,但意识到如果客户端不需要使用它,它将永远被加载,因此清理代码在destroy 方法永远不会运行。
所以现在我被卡住了。
例如,在 Web 应用程序中放置清理代码的最佳位置在哪里?如果我把它放在servlet 中,我不能确保客户会使用它,如果我把它放在listener 中,是否为时已晚?

【问题讨论】:

  • 我不明白为什么您对在您的 web 应用程序中注册 ServletContextListener 不满意。 servlet 和过滤器首先被销毁有什么问题?您不希望在某些 servlet 仍在工作时进行清理。
  • 您究竟需要在“清理”代码中做什么?
  • @dystroy:因为我的类在关机时已经卸载,然后才有机会运行ServletContextListener 中的清理代码。
  • @ThorbjørnRavnAndersen:从关闭executors 到关闭数据库
  • 您可以选择实现DisposableBean 或使用destroy-method 进行配置。见here

标签: java tomcat web-applications servlets


【解决方案1】:

如果您可以选择将 servlet 配置为在启动时加载,则可以解决上述问题。

有关示例和一些讨论,请参阅 What does the servlet <load-on-startup> value signify

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2014-10-24
    • 2012-03-03
    相关资源
    最近更新 更多