簡體   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