У меня есть общий Java-агент, основанный на aspectj, который работает в нескольких приложениях с весенней загрузкой (и в нескольких версиях с весенней загрузкой). Я пытаюсь найти способ получить порт во время выполнения программно, когда приложение ЗАПУСКАЕТСЯ (до того, как будет сделан запрос). Эта проблема -
Я не могу использовать обычный способ получить весенний загрузочный порт, такой как описанный в https://stackoverflow.com/questions/30312058/spring-boot-how-to-get-the-running-port, который включает аннотацию @Autowired и т. д.
Ищу порт после запуска приложений, не полагаясь на запросы.
Я ищу способ получить доступ к объекту LocalServerPort или любым другим параметрам, которые позволят мне получить доступ к порту.
спасибо за любую помощь
@LocalServerPort предназначен только для тестов, а не для выполнения. Поэтому попытка получить это во время выполнения просто потерпит неудачу, потому что этого нет (это только тест!). Агент должен получить ServerProperties и посмотреть на port, если он был установлен, используйте его, иначе используйте 8080 по умолчанию. Однако все еще кажется хакерским и похоже, что вы пытаетесь что-то делать не в том месте.
@chrylis это действительно не стандартный случай, а скорее хитрый ... Можете ли вы привести мне пример того, что вы подразумеваете под статическим держателем и бегунком?




После некоторого исследования, как я уже упоминал, я работаю с аспектом, я использовал следующие инструменты:
after():
execution(org.springframework.boot.context.embedded.EmbeddedServletContainer+.new(..))
И взял порт прямо из экземпляра EmbeddedServletContainer с помощью метода getPort (). В случае Tomcat, если порт -1, я использую встроенный объект tomcat, чтобы получить порт из самого коннектора.
Это звучит как сомнительно хакерская ситуация (обычно лучше рассказать приложению, какой порт использовать), но вы можете попробовать что-нибудь со статическим держателем и бегуном, который устанавливает там значение.