SpringBoot Web工程同時啟動多個HTTP端口的方法
一、簡要概述
我們在開發(fā)Springboot Web工程中,一般通過在application.yml配置文件中使用server.port來指定唯一的http啟動端口,那么Springboot Web工程支不支持指定多個HTTP端口啟動呢,答案是肯定的!
二、Tomcat應(yīng)用服務(wù)器
默認情況下,boot內(nèi)置應(yīng)用服務(wù)器為spring-boot-starter-tomcat
1,定義啟動端口
為了跟系統(tǒng)配置server.port做區(qū)分,我們定義路徑為server.http.ports,典型配置如下:
server:
port: 8082
servlet:
context-path: /
session:
timeout: 1800
http:
ports: 80,80852,編寫TomcatHttp配置類
import java.util.Arrays;
import java.util.stream.Collectors;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatHttpConfig
{
@Value("${server.http.ports:}")
int[] httpPorts;
/**
* 添加額外的HTTP連接器
*/
@Bean
public ServletWebServerFactory servletContainer()
{
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addAdditionalTomcatConnectors(httpConnectors());
return factory;
}
private Connector[] httpConnectors()
{
return Arrays.stream(httpPorts).mapToObj(p -> {
Connector connector = new Connector("HTTP/1.1");
connector.setScheme("http");
connector.setPort(p);
connector.setSecure(false);
connector.setRedirectPort(443); // 關(guān)鍵配置:當請求需要安全連接時,重定向到 HTTPS 端口
return connector;
}).collect(Collectors.toList()).toArray(new Connector[0]);
}
}
3,運行結(jié)果
查看日志,可以看到我們成功在 8082 (http) 80 (http) 8085 (http)啟動了應(yīng)用。
_ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ [32m :: Spring Boot :: [39m [2m (v2.2.4.RELEASE)[0;39m [2m2026-04-08 17:40:51.014[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.HttpBootApplication [0;39m [2m:[0;39m The following profiles are active: dev [2m2026-04-08 17:40:51.958[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.c.c.s.GenericScope [0;39m [2m:[0;39m BeanFactory id=baa29068-0ad7-369f-9820-35c38d0277df [2m2026-04-08 17:40:52.942[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.w.e.t.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port(s): 8082 (http) 80 (http) 8085 (http) [2m2026-04-08 17:40:52.954[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.h.Http11NioProtocol [0;39m [2m:[0;39m Initializing ProtocolHandler ["http-nio-8082"] [2m2026-04-08 17:40:52.955[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.h.Http11NioProtocol [0;39m [2m:[0;39m Initializing ProtocolHandler ["http-nio-80"] [2m2026-04-08 17:40:52.966[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.h.Http11NioProtocol [0;39m [2m:[0;39m Initializing ProtocolHandler ["http-nio-8085"] [2m2026-04-08 17:40:52.967[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.c.StandardService [0;39m [2m:[0;39m Starting service [Tomcat] [2m2026-04-08 17:40:52.968[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.c.StandardEngine [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/9.0.30] [2m2026-04-08 17:40:53.072[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.c.C.[.[.[/] [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext [2m2026-04-08 17:40:53.072[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.w.c.ContextLoader [0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 2041 ms [2m2026-04-08 17:40:53.150[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.c.u.SpringContextUtils [0;39m [2m:[0;39m ###### execute setApplicationContext ###### [2m2026-04-08 17:40:53.515[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.d.a.OptionalLiveReloadServer [0;39m [2m:[0;39m LiveReload server is running on port 35729 [2m2026-04-08 17:40:53.786[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.w.c.SimpleFileController [0;39m [2m:[0;39m #### isTomcat: false [2m2026-04-08 17:40:53.788[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.w.c.SimpleFileController [0;39m [2m:[0;39m #### isJetty: false [2m2026-04-08 17:40:54.036[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mpertySourcedRequestMappingHandlerMapping[0;39m [2m:[0;39m Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)] [2m2026-04-08 17:40:54.077[0;39m [33m WARN[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.c.n.a.ArchaiusAutoConfiguration [0;39m [2m:[0;39m No spring.application.name found, defaulting to 'application' [2m2026-04-08 17:40:54.084[0;39m [33m WARN[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.n.c.s.URLConfigurationSource [0;39m [2m:[0;39m No URLs will be polled as dynamic configuration sources. [2m2026-04-08 17:40:54.084[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.n.c.s.URLConfigurationSource [0;39m [2m:[0;39m To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. [2m2026-04-08 17:40:54.090[0;39m [33m WARN[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.n.c.s.URLConfigurationSource [0;39m [2m:[0;39m No URLs will be polled as dynamic configuration sources. [2m2026-04-08 17:40:54.091[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.n.c.s.URLConfigurationSource [0;39m [2m:[0;39m To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. [2m2026-04-08 17:40:54.282[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.s.c.ThreadPoolTaskExecutor [0;39m [2m:[0;39m Initializing ExecutorService 'applicationTaskExecutor' [2m2026-04-08 17:40:54.327[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.a.w.s.WelcomePageHandlerMapping [0;39m [2m:[0;39m Adding welcome page: class path resource [static/index.html] [2m2026-04-08 17:40:54.447[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.s.c.ThreadPoolTaskScheduler [0;39m [2m:[0;39m Initializing ExecutorService 'taskScheduler' [2m2026-04-08 17:40:54.740[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36md.s.w.p.DocumentationPluginsBootstrapper[0;39m [2m:[0;39m Documentation plugins bootstrapped [2m2026-04-08 17:40:54.743[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36md.s.w.p.DocumentationPluginsBootstrapper[0;39m [2m:[0;39m Found 1 custom documentation plugin(s) [2m2026-04-08 17:40:54.785[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36ms.d.s.w.s.ApiListingReferenceScanner [0;39m [2m:[0;39m Scanning for api listing references [2m2026-04-08 17:40:54.947[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.d.s.w.r.o.CachingOperationNameGenerator[0;39m [2m:[0;39m Generating unique operation named: uploadUsingPOST_1 [2m2026-04-08 17:40:54.960[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.d.s.w.r.o.CachingOperationNameGenerator[0;39m [2m:[0;39m Generating unique operation named: backDownUploadUsingGET_1 [2m2026-04-08 17:40:54.994[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.h.Http11NioProtocol [0;39m [2m:[0;39m Starting ProtocolHandler ["http-nio-8082"] [2m2026-04-08 17:40:55.002[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.h.Http11NioProtocol [0;39m [2m:[0;39m Starting ProtocolHandler ["http-nio-80"] [2m2026-04-08 17:40:55.004[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.h.Http11NioProtocol [0;39m [2m:[0;39m Starting ProtocolHandler ["http-nio-8085"] [2m2026-04-08 17:40:55.014[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.w.e.t.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port(s): 8082 (http) 80 (http) 8085 (http) with context path '' [2m2026-04-08 17:40:55.102[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.HttpBootApplication [0;39m [2m:[0;39m Started HttpBootApplication in 5.126 seconds (JVM running for 6.249) [2m2026-04-08 17:40:55.353[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[nio-8082-exec-2][0;39m [36mo.a.c.c.C.[.[.[/] [0;39m [2m:[0;39m Initializing Spring DispatcherServlet 'dispatcherServlet' [2m2026-04-08 17:40:55.354[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[nio-8082-exec-2][0;39m [36mo.s.w.s.DispatcherServlet [0;39m [2m:[0;39m Initializing Servlet 'dispatcherServlet' [2m2026-04-08 17:40:55.369[0;39m [32m INFO[0;39m [35m5024[0;39m [2m---[0;39m [2m[nio-8082-exec-2][0;39m [36mo.s.w.s.DispatcherServlet [0;39m [2m:[0;39m Completed initialization in 15 ms
三、Jetty應(yīng)用服務(wù)器
1,修改工程依賴文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- 異步日志,需要加入disruptor依賴 --> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version> </dependency> <!-- Provided --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
2,定義啟動端口
server:
port: 443
ssl:
key-store: classpath:xxxxxxx.pfx
key-store-password: xxxxxxx
keyStoreType: PKCS12
servlet:
context-path: /
session:
timeout: 1800
http:
ports: 80,80813,編寫JettyHttp配置類
import java.util.Arrays;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.ServerConnector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JettyHttpConfig
{
@Value("${server.http.ports:}")
int[] httpPorts;
/**
* 添加額外的HTTP連接器
*/
@Bean
public ServletWebServerFactory servletContainer()
{
HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.setSecureScheme("https");
httpConfig.setSecurePort(443);
// 添加多個額外的HTTP連接器
JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
Arrays.stream(httpPorts).forEach(port -> {
factory.addServerCustomizers(server -> {
ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
httpConnector.setPort(port);
server.addConnector(httpConnector);
});
});
return factory;
}
}
4,運行結(jié)果
查看日志,可以看到我們成功在 port(s) 443 (ssl, http/1.1), 80 (http/1.1), 8081 (http/1.1)啟動了應(yīng)用。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
[32m :: Spring Boot :: [39m [2m (v2.2.4.RELEASE)[0;39m
[2m2026-04-08 17:45:45.859[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.HttpsApplication [0;39m [2m:[0;39m Starting HttpsApplication on 10_0_16_11 with PID 6000 (C:\gitee\effict-side\springboot-ssl\target\classes started by Administrator in C:\gitee\effict-side\springboot-ssl)
[2m2026-04-08 17:45:45.871[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.f.HttpsApplication [0;39m [2m:[0;39m The following profiles are active: prod
[2m2026-04-08 17:45:45.921[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.e.DevToolsPropertyDefaultsPostProcessor[0;39m [2m:[0;39m Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
[2m2026-04-08 17:45:45.922[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.e.DevToolsPropertyDefaultsPostProcessor[0;39m [2m:[0;39m For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
[2m2026-04-08 17:45:46.623[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.u.log [0;39m [2m:[0;39m Logging initialized @2312ms to org.eclipse.jetty.util.log.Slf4jLog
[2m2026-04-08 17:45:46.856[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.w.e.j.JettyServletWebServerFactory[0;39m [2m:[0;39m Server initialized with port: 443
[2m2026-04-08 17:45:46.872[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.Server [0;39m [2m:[0;39m jetty-9.4.25.v20191220; built: 2019-12-20T17:00:00.294Z; git: a9729c7e7f33a459d2616a8f9e9ba8a90f432e95; jvm 1.8.0_202-b08
[2m2026-04-08 17:45:46.900[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.h.C.application [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext
[2m2026-04-08 17:45:46.901[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.w.c.ContextLoader [0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 979 ms
[2m2026-04-08 17:45:47.147[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.session [0;39m [2m:[0;39m DefaultSessionIdManager workerName=node0
[2m2026-04-08 17:45:47.147[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.session [0;39m [2m:[0;39m No SessionScavenger set, using defaults
[2m2026-04-08 17:45:47.148[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.session [0;39m [2m:[0;39m node0 Scavenging every 660000ms
[2m2026-04-08 17:45:47.159[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.h.ContextHandler [0;39m [2m:[0;39m Started o.s.b.w.e.j.JettyEmbeddedWebAppContext@7f09c304{application,/,[file:///C:/Users/Administrator/AppData/Local/Temp/2/jetty-docbase.7882543093635305757.443/],AVAILABLE}
[2m2026-04-08 17:45:47.159[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.Server [0;39m [2m:[0;39m Started @2848ms
[2m2026-04-08 17:45:47.251[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.s.c.ThreadPoolTaskExecutor [0;39m [2m:[0;39m Initializing ExecutorService 'applicationTaskExecutor'
[2m2026-04-08 17:45:47.314[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.a.w.s.WelcomePageHandlerMapping [0;39m [2m:[0;39m Adding welcome page: class path resource [static/index.html]
[2m2026-04-08 17:45:47.405[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.d.a.OptionalLiveReloadServer [0;39m [2m:[0;39m LiveReload server is running on port 35729
[2m2026-04-08 17:45:47.431[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.h.C.application [0;39m [2m:[0;39m Initializing Spring DispatcherServlet 'dispatcherServlet'
[2m2026-04-08 17:45:47.431[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.w.s.DispatcherServlet [0;39m [2m:[0;39m Initializing Servlet 'dispatcherServlet'
[2m2026-04-08 17:45:47.436[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.w.s.DispatcherServlet [0;39m [2m:[0;39m Completed initialization in 4 ms
[2m2026-04-08 17:45:47.621[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.u.s.SslContextFactory [0;39m [2m:[0;39m x509=X509@1b40392c(00fly.online,h=[00fly.online, www.00fly.online],w=[]) for Server@5eee0143[provider=null,keyStore=file:///C:/gitee/effict-side/springboot-ssl/target/classes/data/ssl/00fly.online.pfx,trustStore=null]
[2m2026-04-08 17:45:47.671[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.AbstractConnector [0;39m [2m:[0;39m Started ServerConnector@31a907ff{SSL,[ssl, http/1.1]}{0.0.0.0:443}
[2m2026-04-08 17:45:47.673[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.AbstractConnector [0;39m [2m:[0;39m Started ServerConnector@45a4bdf2{HTTP/1.1,[http/1.1]}{0.0.0.0:80}
[2m2026-04-08 17:45:47.675[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.e.j.s.AbstractConnector [0;39m [2m:[0;39m Started ServerConnector@c2ae8e{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
[2m2026-04-08 17:45:47.676[0;39m [32m INFO[0;39m [35m6000[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.w.e.j.JettyWebServer [0;39m [2m:[0;39m Jetty started on port(s) 443 (ssl, http/1.1), 80 (http/1.1), 8081 (http/1.1) with context path '/'
四、Undertow應(yīng)用服務(wù)器
1,修改工程依賴文件
將spring-boot-starter-jetty修改為spring-boot-starter-undertow
2,編寫UndertowHttp配置類
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.undertow.UndertowOptions;
@Configuration
public class UndertowHttpConfig
{
@Value("${server.http.ports:}")
int[] httpPorts;
/**
* 添加額外的HTTP連接器
*/
@Bean
public ServletWebServerFactory servletContainer()
{
// 添加多個額外的HTTP連接器,并開啟HTTP2
UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
Arrays.stream(httpPorts).forEach(port -> {
factory.addBuilderCustomizers(builder -> builder.addHttpListener(port, "0.0.0.0").setServerOption(UndertowOptions.ENABLE_HTTP2, true));
});
return factory;
}
}
以上就是SpringBoot Web工程同時啟動多個HTTP端口的方法的詳細內(nèi)容,更多關(guān)于SpringBoot Web啟動多個HTTP端口的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java?部署Jenkins?Pipeline?構(gòu)建?Java?項目的流程(自動化)
本文將深入探討如何使用Jenkins?Pipeline來自動化構(gòu)建、測試和部署一個典型的Java項目,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2026-04-04
SpringBoot項目中Druid自動登錄功能實現(xiàn)
Druid是Java語言中最好的數(shù)據(jù)庫連接池,Druid能夠提供強大的監(jiān)控和擴展功能,這篇文章主要介紹了SpringBoot項目中Druid自動登錄功能實現(xiàn),需要的朋友可以參考下2024-08-08
解決springboot服務(wù)啟動報錯:Unable?to?start?embedded?contain
這篇文章主要介紹了解決springboot服務(wù)啟動報錯:Unable?to?start?embedded?contain的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Java項目中“zip END header not found“錯誤的解決方案
在 Java 項目構(gòu)建或運行過程中,開發(fā)者常會遇到 java.util.zip.ZipException: zip END header not found 錯誤,這一異常通常與 JAR 文件損壞、下載不完整、編碼問題或 Maven 依賴管理配置不當有關(guān),本文給大家介紹了Java項目中“zip END header not found“錯誤的解決方案2025-06-06
Java之Springcloud Gateway內(nèi)置路由案例講解
這篇文章主要介紹了Java之Springcloud Gateway內(nèi)置路由案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08

