java - Spring 启动: How to get running port of application deployed on JBoss (or any app server)?

标签 java spring spring-boot jboss

应该有一种简单的方法来做到这一点,但网上的大多数答案都使用诸如 ${server.port} (或其等效项)之类的内容提供嵌入式 Tomcat 服务器的端口。其他解决方案提到监听 EmbeddedServletContainerInitializedEvent 但这也仅适用于嵌入式 Web 服务器。

如何获取部署在(假设)JBoss 上的应用程序的端口,其中端口是通过服务器自己的配置文件(而不是通过 application.properties)决定的?

(P.S:在 Spring Boot 2 中,有一个名为 WebServerInitializedEvent 的事件,使用它我们可能可以获得真正的端口,但我正在寻找 Spring Boot 1.5 之前的解决方案.8)

最佳答案

我相信应用程序服务器(JBoss和其他)准备好接受http连接的端口是应用程序服务器本身内部的东西,并且当它不这样做时,对于Spring Boot应用程序来说有点“超出范围”运行嵌入式服务器。

应用程序服务器也可能会定义绑定(bind)到不同端口的多个连接器(例如,一个用于 http,一个用于 https)、内部连接与“公共(public)”连接(按 IP 段过滤)等等。

通常开发人员不关心此类信息,如果您需要生成某些链接,请“相对”进行。通常您甚至不需要知道部署 WAR 的上下文路径。

现在,如果您确实需要这样的东西,则没有通用的指南,每个应用程序服务器可能会提供自己的方法。

您可以尝试访问JMX(例如曾经在JBoss内部运行的Tomcat,我可能没有更新这方面的信息,很长时间没有处理JBoss)暴露了Connector的MBean,您可以从中读取端口信息(如果部署了许多连接器,则包括许多端口的信息)。

关于java - Spring 启动: How to get running port of application deployed on JBoss (or any app server)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745488/

相关文章:

java - Mongodb 聚合(Java/Spring)查询以获取最后一个子元素

java - Spring MVC : Receive radio button values

java - 如何在 EL 之外访问 JSTL 中的模型?

java - 注释 Lambda 表达式的功能接口(interface)

java - Spring MVC - 严重 : Exception starting filter Spring OpenEntityManagerInViewFilter

spring-boot 2.5.2 带有 mapstruct\lombok 和 swagger2 (mapstruct 不起作用)

java - 如何在不使用 Spring 或 Spring Boot 的情况下使用 Micrometer 在 TICK 堆栈上进行指标收集?

java - Spring session jdbc

java - 无法在 javafx 中设置静态 TextField 的值

java - android - Java 向我抛出 FileNotFound 异常 HttpURLConnection