应该有一种简单的方法来执行此操作,但是网上的大多数答案都使用类似${server.port}
(或其等效项)的内容来提供嵌入式Tomcat服务器的端口。其他解决方案提到监听EmbeddedServletContainerInitializedEvent
,但这也仅适用于嵌入式Web服务器。
如何获取部署在(例如)JBoss
上的应用程序的端口,该端口是通过服务器自己的配置文件(而不是通过application.properties)确定的?
(PS:在Spring Boot 2中,有一个名为WebServerInitializedEvent
的事件,我们可以使用该事件获得真实的端口,但是我正在寻找Spring Boot 1.5.8
以下的解决方案)
答案 0 :(得分:0)
我相信应用程序服务器(JBoss和其他服务器)准备接受HTTP连接的端口是应用程序服务器本身的内部端口,并且在没有启动时对于Spring Boot应用程序来说是“范围外的”运行嵌入式服务器。
应用服务器还可能会定义绑定到不同端口的多个连接器(例如,一个用于http,一个用于https),内部与“公共”连接(按ip段过滤),而不是其他。
通常,开发人员并不关心此类信息,如果您需要生成某些链接,请“相对”进行。通常,您甚至不需要知道部署WAR的上下文路径。
现在,如果您绝对需要这样的东西,则没有通用的准则,每个应用程序服务器都可以提供自己的方式。
您可以尝试访问JMX(例如,曾经在JBoss内部运行的Tomcat,我可能对此未进行任何更新,很长时间没有处理JBoss)暴露了MBean for Connector,您可以从中读取端口(如果部署了许多连接器,则显示许多端口的信息)。