代码之家  ›  专栏  ›  技术社区  ›  Andreas Petersson

从servlet关闭/取消部署Tomcat

  •  4
  • Andreas Petersson  · 技术社区  · 16 年前

    我在Tomcat中有一个init servlet,用于加载关键数据。有时有必要在某些错误时中止启动。

    如何优雅地关闭已部署的应用程序/整个应用程序服务器而不调用 System.exit(1)

    我想避免通过端口调用shutdown servlet,因为在我的安装中没有配置这个端口。

    可能有一些任务需要在web.xml中定义的关闭时从侦听器运行

    1 回复  |  直到 14 年前
        1
  •  7
  •   matt b    16 年前

    首先,你永远不应该打电话 System.exit() 在servlet容器中,因为可能有其他应用程序与您的应用程序在同一进程中运行,所以强制终止整个进程是非常不正确的。

    假设您的“init servlet”实现 ServletContextListener ,在API/接口中没有定义向servlet容器发出“请整齐地关闭应用程序”信号的正式方式。但是你可以扔一些 RuntimeException contextInitialized() 方法,在大多数容器(至少是Tomcat)中,该方法将停止webapp的启动并使其保持“已停止”状态。不过,我怀疑Tomcat会继续给你的关机监听器打电话。

    您可能需要重新考虑您的设计,以便关键数据/关闭逻辑不会与servlet容器的生命周期紧密相连。