LifecycleListener не прослушивает после запуска сервера, когда тип сервера = периодический - PullRequest
0 голосов
/ 01 октября 2019

Я создал EventHookListener, который реализует LifecycleListener. Я переопределил метод lifecycleEvent() и продолжаю слушать сервер по типу сервера печати и состоянию сервера.

Фрагмент кода:

@Override
public void lifecycleEvent(LifecycleEvent arg0) {
    Lifecycle lifecycle = arg0.getLifecycle();
    System.out.println("Lifecycle:"+lifecycle);
    if (lifecycle == null) {
      return;
    }
    String type = arg0.getType();
    System.out.println("Type:"+type);
    if (type == null) {
      return;
    }
    String stateName = lifecycle.getStateName();
    System.out.println("StateName:"+stateName);
    if (stateName == null) {
       return;
    }
}

Для tomcat версия 9.0.26 Сервер Tomcat продолжает слушать, если сервер работает. и ниже журнал входит в Catalina.out: Но в 9.0.26 версии сервер Tomcat продолжает прослушивать, если сервер работает.

23-Sep-2019 16: 36: 08.381 INFO [main] org.apache.coyote.AbstractProtocol.start Запуск ProtocolHandler ["ajp-nio-8009"] Жизненный цикл: StandardServer [8005] Тип: after_start StateName: STARTED

текущий каталог: / tmp Код выхода: 0

23-сен-2019 16: 36: 08.407 INFO [main] org.apache.catalina.startup.Catalina.start Запуск сервера за [8 239] миллисекунд Срок эксплуатации: StandardServer [8005] Тип: периодическое StateName: STARTED

Но для любой другой версии Tomcat (например, версии 9.0.6 или 8.5.45) прослушиватель жизненного цикла не прослушивает, как только сервер Tomcat переходит в состояние after_start.

ex.

Срок эксплуатации: StandardServer [8005] Тип: after_start StateName: STARTED

текущий каталог: / tmp Код выхода: 0 23-Sep-2019 16:48: 10.422 INFO [main] org.apache.catalina.startup.Catalina.start Запуск сервера в 681мс

Может кто-нибудь помочь с любой подсказкой, которую я здесь упускаю? Эта функция Lifecycle listener работает только в 9.0.26 версии , но не в более старой версии. Хотя содержимое класса LifecycleListener одинаково для более старых tomcat и последней версии tomcat.

1 Ответ

0 голосов
/ 02 октября 2019

Планировщик, запускающий периодические события, был перемещен из Службы на Сервер в 9.0.14, поэтому в версиях Tomcat до 9.0.14 вы не увидите периодические события для LifecycleListeners, подключенных к Серверу.

Если вам нужно единообразное поведение в версиях Tomcat, вы можете переместить слушателя в Службу, а затем выполнить ((Service) arg0).getServer() для доступа к объекту Сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...