中止Tomcat初创公司

Mar*_*son 2 java tomcat

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

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

  2. -Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE = true,不起作用.Tomcat启动就好了.

  3. 抛出未被捕获的异常.我试过抛出异常.Tomcat仍然正确初始化,但我的Web应用程序处于非功能状态.

  4. 使用Tomcat JMX API.没有任何关闭方法会导致Tomcat关闭.

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

Mar*_*mas 5

Tomcat旨在抵御那些无法启动的编写错误的应用程序.

org.apache.catalina.startup.EXIT_ON_INIT_FAILURE用于在Tomcat的某个组件(例如其中一个连接器)未启动时停止Tomcat(例如,因为端口正在使用中).

System.exit()是丑陋的,但它会起作用,就Tomcat来说它是安全的(至于kill -9).应用程序可能不喜欢这种相当残酷的关闭方法.

有一种Tomcat特定的方法可以更干净地完成这项工作.将自定义LifecycleListener添加到服务器组件并让它响应AFTER_START_EVENT.让侦听器将Container层次结构从服务器导航到上下文[服务器 - >服务 - >引擎 - 主机 - >上下文],并检查每个上下文是否处于STARTED状态.如果没有,请在服务器上调用stop()然后destroy().