У меня есть приложение Spring Boot, в котором каждый экземпляр приложения является узлом в кластере, и каждый узел нуждается в чтобы иметь возможность разговаривать с другими узлами в кластере для обмена информацией. По соображениям производительности это не может произойти через HTTP, хотя начальный контакт для каждого узла в кластере осуществляется через HTTP-вызов.Получение порта, который Tomcat запускается из файла WAR WAR Spring, развернутого в уже запущенном экземпляре Tomcat 8
Чтобы выполнить начальный HTTP-вызов, экземпляры должны иметь возможность получить порт, в котором работают другие экземпляры, чтобы они могли регистрироваться друг с другом. Это означает, что каждый узел должен знать, какой порт использует его экземпляр Tomcat.
Это прекрасно работает, если я развожу WAR-файл, содержащий встроенный экземпляр Tomcat. Я регистрирую ApplicationListener для EmbeddedServletContainerInitializedEvent и получаю порт из EmbbededServletContainer.
Проблема возникает при развертывании WAR-файла в уже запущенном экземпляре Tomcat. Я не могу найти способ определить, какой порт используется для экземпляра Tomcat, и вышеупомянутое событие больше не срабатывает, поскольку экземпляр Tomcat уже запущен.
У кого-нибудь есть идеи, как узнать, какой порт используется?
Вы пробовали что-нибудь еще? Вот сообщение для tomcat7 http://stackoverflow.com/questions/6833947/org-apache-catalina-serverfactory-getserver-equivalent-in-tomcat-7 вы его видели? –
Привет, Энн. Спасибо за ответ. Я нашел ответ, на который вы ссылались некоторое время назад, но это не помогло мне в этот момент. После прочтения вашего вопроса я пошел и попробовал его снова, и обнаружил, что упомянутый код чувствителен к тому, когда он вызван. Мой код работает до того, как код SpringBoot даже завершил инициализацию. Я теперь нашел, чтобы сделать эту работу, и это решает мою проблему. –