一尘不染

中止Tomcat启动

tomcat

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

  1. 我试图使用Tomcat关闭端口。当我的Web应用程序启动时,这还没有准备好。

  2. -Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE = true,不起作用。Tomcat启动正常。

  3. 引发未捕获的异常。我尝试引发异常。Tomcat仍然可以正确初始化,但是我的Web应用程序处于无法运行的状态。

  4. 使用Tomcat JMX API。任何一种关闭方法都不会导致Tomcat关闭。

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


阅读 253

收藏
2020-06-16

共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()。

2020-06-16