![](/img/trans.png)
[英]Undeploy web application from tomcat doesn't remove the deployed directory
[英]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.