我在Tomcat中有一个init servlet来加载关键数据。有时需要在某些错误上中止启动。
如何在不调用System.exit(1)
我想避免通过端口调用shutdown servlet,因为我的安装中没有配置它。
可能需要在web.xml
中定义的关闭时从侦听器运行任务答案 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无法正确加载,则将其终止。