Spring Boot - Как получить порт во время выполнения без использования аннотаций Spring

У меня есть общий Java-агент, основанный на aspectj, который работает в нескольких приложениях с весенней загрузкой (и в нескольких версиях с весенней загрузкой). Я пытаюсь найти способ получить порт во время выполнения программно, когда приложение ЗАПУСКАЕТСЯ (до того, как будет сделан запрос). Эта проблема -

  1. Я не могу использовать обычный способ получить весенний загрузочный порт, такой как описанный в https://stackoverflow.com/questions/30312058/spring-boot-how-to-get-the-running-port, который включает аннотацию @Autowired и т. д.

  2. Ищу порт после запуска приложений, не полагаясь на запросы.

Я ищу способ получить доступ к объекту LocalServerPort или любым другим параметрам, которые позволят мне получить доступ к порту.

спасибо за любую помощь

Это звучит как сомнительно хакерская ситуация (обычно лучше рассказать приложению, какой порт использовать), но вы можете попробовать что-нибудь со статическим держателем и бегуном, который устанавливает там значение.

chrylis -cautiouslyoptimistic- 16.10.2018 11:06
@LocalServerPort предназначен только для тестов, а не для выполнения. Поэтому попытка получить это во время выполнения просто потерпит неудачу, потому что этого нет (это только тест!). Агент должен получить ServerProperties и посмотреть на port, если он был установлен, используйте его, иначе используйте 8080 по умолчанию. Однако все еще кажется хакерским и похоже, что вы пытаетесь что-то делать не в том месте.
M. Deinum 16.10.2018 11:18

@chrylis это действительно не стандартный случай, а скорее хитрый ... Можете ли вы привести мне пример того, что вы подразумеваете под статическим держателем и бегунком?

Lin 16.10.2018 12:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После некоторого исследования, как я уже упоминал, я работаю с аспектом, я использовал следующие инструменты:

 after():
         execution(org.springframework.boot.context.embedded.EmbeddedServletContainer+.new(..))

И взял порт прямо из экземпляра EmbeddedServletContainer с помощью метода getPort (). В случае Tomcat, если порт -1, я использую встроенный объект tomcat, чтобы получить порт из самого коннектора.

Другие вопросы по теме