2009-10-08 91 views
4

我在Tomcat中有一个加载关键数据的init servlet。有时候需要在某些错误上中止启动。从Servlet中关闭/取消部署tomcat

我如何正常关闭的部署应用程序/无需调用System.exit(1)

我想避免调用通过端口关闭的servlet整个应用程序服务器,因为这不是我的安装配置。

可能需要被从关机听众在web.xml中定义任务运行

回答

7

首先,你应该永远永远永远永远叫System.exit()从一个servlet容器内,因为可能有其他的应用在与您的流程相同的流程中运行,并且强行杀死整个流程将是不可思议的错误。

假设您的“init servlet”实现了ServletContextListener,API /接口中没有定义正式的方式向servlet容器发送信号“请关闭应用程序”。然而,你可以从contextInitialized()方法中抛出某种RuntimeException,在大多数容器(至少Tomcat)中,这个方法会停止webapp的启动并将其保持在“停止”状态。但是我怀疑Tomcat会继续打电话给你的关机监听器。

您可能需要重新考虑您的设计,以便您的关键数据/关闭逻辑与servlet容器的生命周期不紧密相关。

+0

其关于关闭实用程序线程和正确书写日志的更多信息 – 2009-10-08 14:28:12

+1

我曾经与一个内存不足的应用程序共享一个Tomcat。当我检测到时,我调用System.exit(0)。关机和Tomcat中的其他方式一样优雅。 – 2009-10-08 23:57:00

+1

那么,如果你获得了OOM,那么在那时就没有什么可做的了,但是关闭了JVM。 – 2009-10-09 12:41:00