具体来说,我希望Tomcat在我的Web应用无法初始化(由于配置错误)时中止启动。
我试图使用Tomcat关闭端口。当我的Web应用程序启动时,这还没有准备好。
-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE = true,不起作用。Tomcat启动正常。
引发未捕获的异常。我尝试引发异常。Tomcat仍然可以正确初始化,但是我的Web应用程序处于无法运行的状态。
使用Tomcat JMX API。任何一种关闭方法都不会导致Tomcat关闭。
到目前为止,我唯一的选择是System.exit(-1)。确实可以,但是我担心对Tomcat这样做会导致问题。
System.exit(-1)
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()。