繁体   English   中英

从 Servlet 关闭/取消部署 tomcat

[英]shutdown / undeploy tomcat from Servlet

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

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

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

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

首先,您永远不应该从 servlet 容器内调用System.exit() ,因为可能有其他应用程序在与您的进程相同的进程中运行,并且强行终止整个进程是非常不正确的。

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

您可能需要重新考虑您的设计,以便您的关键数据/关闭逻辑不会与 servlet 容器的生命周期如此紧密地联系在一起。

我添加的是一个健康检查探针,它会使用curl检查服务器是否仍在运行,我认为可以修改它以检查是否还存在“标志”文件。 我只是发送一个catalina.sh stop命令。

如果这是一个 Docker 容器,您也可以使用 healthcheck 探针让它自行关闭。

理想情况下,如果您可以迁移到 Spring Boot 之类的东西,它运行 tomcat,但如果 Spring Context 没有正确加载则终止它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM