как остановить запуск Tomcat через servletcontextlistener

Есть ли способ остановить запуск tomcat, если определенные условия не выполняются?

Например, я бы хотел, чтобы метод contextInitialized servletContextListener проверял различные атрибуты файла свойств, а также проверял соединение с базой данных и т. д.

Я видел способы выключения tomcat через событие MBean, но для этого требуется хост, порт выключения. В моем случае я надеюсь иметь один базовый класс, который можно использовать в нескольких котах на одном сервере (каждый со своим собственным портом выключения).


person Fred    schedule 27.10.2019    source источник
comment
Это старый ответ, но он все еще может работать, также использует MBean, но я не вижу хоста или номера порта: stackoverflow.com/a/ 4471672/3080094   -  person vanOekel    schedule 28.10.2019


Ответы (1)


Вы можете вызвать порт выключения Tomcat (обычно 8005)... Все, что вам нужно, это номер порта и текст (например, 8005 и SHUTDOWN). Учитывая, что вы находитесь на хосте (servletContextListener работает в Tomcat), вам не нужно имя хоста. Localhost должен помочь.

Альтернативой является запуск вашего Java-кода на сервере — вызов ./shutdown.sh, но для этого нужно знать, где находится этот скрипт.

person David Brossard    schedule 27.10.2019
comment
Спасибо за предложение. Я вешаю трубку, хотя на номер порта. Моя цель разработки состоит в том, чтобы иметь стандартный класс, который используется в пяти различных веб-приложениях, и класс имеет contextListener autoWired, поэтому он запускается сам по себе без какой-либо настройки для каждого из web.xml (порты могут быть разными для каждого приложения через серверы разработки, тестирования и производства). Цель состоит в том, чтобы класс был полностью самоуправляемым, чтобы, если во время установки что-то пошло не так, он выдал полезное сообщение об ошибке в журнал, а затем выключил tomcat. - person Fred; 28.10.2019
comment
Посмотрите, можете ли вы определить CATALINA_HOME из своего кода. Если вы можете, вы можете вызвать ./shutdown.sh - person David Brossard; 28.10.2019