从Servlet关闭/取消部署tomcat

时间:2009-10-08 12:41:27

标签: java tomcat shutdown

我在Tomcat中有一个init servlet来加载关键数据。有时需要在某些错误上中止启动。

如何在不调用System.exit(1)

的情况下优雅地关闭已部署的应用/整个应用服务器

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

可能需要在web.xml

中定义的关闭时从侦听器运行任务

2 个答案:

答案 0 :(得分:7)

首先,你永远不应该从servlet容器中调用System.exit(),因为可能有其他应用程序在同一进程中运行,强行杀死整个过程

假设您的“init servlet”实现了ServletContextListener,则API /接口中没有正式的方式来向servlet容器发出信号“请整齐地关闭应用程序”。但是,您可以从RuntimeException方法中抛出某种contextInitialized(),在大多数容器(至少是Tomcat)中,这将停止启动您的webapp并使其处于“已停止”状态。但是我怀疑Tomcat会继续调用你的关机监听器。

您可能希望重新考虑您的设计,以便您的关键数据/关闭逻辑与servlet容器的生命周期没有紧密联系。

答案 1 :(得分:0)

我添加的是一个运行状况检查探针,该探针将使用curl检查服务器是否仍在运行中,我认为可以对其进行修改以检查是否还存在“标志”文件。我只是发送了catalina.sh stop命令。

如果这是Docker容器,则可以使用healthcheck探针使其也自行关闭。

理想情况是,如果您可以迁移到类似Spring Boot的东西,该东西可以运行tomcat,但是如果Spring Context无法正确加载,则将其终止。