具体来说,我希望Tomcat在我的Web应用无法初始化时(由于配置错误)中止启动。


我试图使用Tomcat关闭端口。当我的Web应用程序启动时,这还没有准备好。
-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE = true,不起作用。 Tomcat启动正常。
引发未捕获的异常。我尝试引发异常。 Tomcat仍然可以正确初始化,但是我的Web应用程序处于无法运行的状态。
使用Tomcat JMX API。任何一种关闭方法都不会导致Tomcat关闭。


到目前为止,我仅有的其他选择是System.exit(-1)。确实可以,但是我担心对Tomcat这样做会导致问题。

最佳答案

Tomcat旨在针对无法启动的错误编写的应用程序具有弹性。

org.apache.catalina.startup.EXIT_ON_INIT_FAILURE用于在Tomcat的组件之一(例如连接器之一)没有启动(例如,因为端口正在使用)时停止Tomcat。

System.exit()很丑陋,但是可以正常工作,并且就Tomcat而言是安全的(就此而言,kill -9)。是应用程序可能不喜欢这种相当残酷的关机方法。

有一种特定于Tomcat的方法可以更干净地执行此操作。将自定义LifecycleListener添加到服务器组件,并使它响应AFTER_START_EVENT。让侦听器将容器层次结构从服务器导航到上下文[Server-> Service(s)-> Engine-Host(s)-> Context(s)],并检查每个上下文是否处于STARTED状态。如果不是,请在服务器上调用stop(),然后调用destroy()。

09-30 15:07
查看更多