【问题标题】:how to stop tomcat startup via servletcontextlistener如何通过 servletcontextlistener 停止 tomcat 启动
【发布时间】:2019-10-27 22:11:11
【问题描述】:

如果某些情况不发生,有没有办法阻止tomcat的启动?

例如,我希望 servletContextListener 的 contextInitialized 方法检查各种属性文件属性以及验证数据库连接等。

我见过通过 MBean 事件关闭 tomcat 的方法,但它需要主机、关闭端口。就我而言,我希望有一个基类可以在同一台服务器上的多个 tomcat 中使用(每个都有自己的关闭端口)。

【问题讨论】:

  • 这是一个旧答案,但仍然可以工作,也使用 MBean,但我没有看到主机或端口号:*.com/a/4471672/3080094

标签: java tomcat servletcontextlistener


【解决方案1】:

您可以调用 Tomcat 的关闭端口(通常为 8005)...您所需要的只是端口号和文本(例如 8005 和 SHUTDOWN)。鉴于您在主机上(servletContextListener 在 Tomcat 中运行),您不需要主机名。本地主机应该可以解决问题。

另一种方法是让您的 Java 代码在服务器上运行一个进程 - 调用 ./shutdown.sh 但这需要知道该脚本在哪里。

【讨论】:

  • 感谢您的建议。我挂断了端口号。我的设计目标是拥有一个在五个不同的 webapps 中使用的标准类,并且该类具有 contextListener autoWired,因此它可以自行启动而无需对每个 web.xml 进行任何自定义(每个应用程序的端口可能不同)开发、测试和生产服务器)。目标是让类完全自我管理,这样如果在安装过程中出现问题,它会在日志中生成有用的错误消息,然后关闭 tomcat。
  • 查看是否可以从代码中确定 CATALINA_HOME。如果可以,那么您可以调用 ./shutdown.sh