Windows服务模式Wildfly部署Spring项目单独配置端口方法
核心逻辑说明
Wildfly作为独立Java EE应用服务器,所有部署的应用默认共享服务器侧配置的HTTP监听端口,应用本身没有权限直接修改容器的监听端口,因此SpringBoot配置文件里的server.port参数仅在使用内嵌容器启动时生效,部署到外部Wildfly时该配置默认无效。
要实现单应用独立使用8093端口、不修改全局默认8080端口配置的需求,不管是standalone直接运行还是注册为Windows服务运行(Windows服务本质是调用Wildfly本地安装目录的配置启动,配置逻辑和standalone模式完全一致),可采用以下两种方案:
方案1:Wildfly原生多端口监听配置(推荐)
该方案通过新增独立的socket绑定、HTTP监听器、虚拟主机,实现单端口与单应用的绑定,不影响原有8080端口的所有部署应用。
操作步骤:
- 停止运行Wildfly的Windows服务,打开Wildfly安装目录下
standalone/configuration/路径中服务启动使用的配置文件(默认是standalone.xml,如果启动时指定了ha等其他配置则对应修改对应xml文件)。 - 找到
<socket-binding-group>配置节点,在原有端口绑定配置旁新增8093端口的独立绑定,不要修改原有8080端口的配置:
<socket-binding name="http-8093" port="8093"/>
- 找到Undertow Web容器的子系统配置节点(节点标识为
<subsystem xmlns="urn:jboss:domain:undertow:*">),在<server name="default-server">节点下新增绑定8093端口的HTTP监听器,指定默认虚拟主机:
<http-listener name="http-8093-listener" socket-binding="http-8093" default-host="host-8093" redirect-socket="https" enable-http2="true"/>
- 还是在Undertow子系统配置内,新增对应8093端口的独立虚拟主机配置:
<host name="host-8093" default-web-module="${project.artifactId}" alias="localhost,127.0.0.1"> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host>
注意:
default-web-module的值需要和你pom.xml里配置的finalName保持一致,也就是你的WAR包不带后缀的名称。
- 修改项目中
src/main/webapp/WEB-INF/jboss-web.xml配置,新增虚拟主机绑定规则:
<?xml version="1.0" encoding="UTF-8"?> <jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd"> <context-root>/</context-root> <virtual-host>host-8093</virtual-host> </jboss-web>
- 重新打包项目生成WAR包,部署到Wildfly后启动Windows服务,即可通过
http://127.0.0.1:8093/swagger-ui.html访问目标应用,原有8080端口的服务完全不受影响。
方案2:改用SpringBoot内嵌容器部署
如果不想修改Wildfly的全局配置,可以直接将SpringBoot项目打包为带内嵌Web容器(Tomcat/Undertow均可)的可执行JAR包,单独将这个JAR包注册为Windows服务运行。
这种模式下你之前在application.properties中配置的server.port=8093会直接生效,不需要依赖Wildfly容器,端口配置逻辑和你之前使用Tomcat的体验完全一致。
内容的提问来源于stack exchange,提问作者Felipe La Rotta
相关产品推荐
相关产品推荐

