Java SpringBoot:如何获得部署在JBoss(或任何应用服务器)上的应用程序的运行端口?

Java SpringBoot:如何获得部署在JBoss(或任何应用服务器)上的应用程序的运行端口?,java,spring,spring-boot,jboss,Java,Spring,Spring Boot,Jboss,应该有一种简单的方法来实现这一点,但是网络上的大多数答案都使用类似于${server.port}(或其等价物)的东西来提供嵌入式Tomcat服务器的端口。其他解决方案提到监听EmbeddedServletContainerInitializedEvent,但这也仅适用于嵌入式web服务器 我如何获得部署在(比如)JBoss上的应用程序的端口,该端口是通过服务器自己的配置文件(而不是通过application.properties)决定的 (注意:在SpringBoot2中,有一个名为WebSer

应该有一种简单的方法来实现这一点,但是网络上的大多数答案都使用类似于
${server.port}
(或其等价物)的东西来提供嵌入式Tomcat服务器的端口。其他解决方案提到监听
EmbeddedServletContainerInitializedEvent
,但这也仅适用于嵌入式web服务器

我如何获得部署在(比如)JBoss上的应用程序的端口,该端口是通过服务器自己的配置文件(而不是通过application.properties)决定的


(注意:在SpringBoot2中,有一个名为
WebServerInitializeEvent
的事件,使用它我们可能可以获得真正的端口,但我正在寻找解决方案,直到
SpringBoot1.5.8

我相信应用程序服务器(JBoss和其他)所在的端口准备接受http连接是应用程序服务器本身的内部内容,对于spring启动应用程序来说,当它不运行嵌入式服务器时,它有点“超出范围”

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

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

现在,如果您确实需要这样的东西,没有通用的指导原则,每个应用服务器都可以提供自己的方法


您可以尝试访问JMX(例如,用于在JBoss内部运行的Tomcat,我可能对此没有更新,很长时间没有处理JBoss)公开用于连接器的MBean,您可以从中读取端口信息(如果部署了多个连接器,则可以读取多个端口的端口信息)。

System.getProperty(“server.port”)
@ElliottFrisch,它只提供在应用程序中配置的端口。属性您需要使用一些特定于应用程序服务器的代码。有人对JBoss提出了同样的问题:根据您的需要,只需拨打电话。您可以将
ServletRequest
对象作为控制器方法上的参数获取。--容器可以侦听多个端口,并且可能位于代理服务器后面,因此只有在收到请求时才知道真正的端口。