SpringBoot Web工程同时启动多个HTTP端口的方法

 更新时间:2026年04月12日 16:01:54   作者:爱码少年 00fly.online  
本文介绍了在SpringbootWeb工程中如何配置多个HTTP端口,分别以Tomcat、Jetty和Undertow为例,通过修改配置文件和编写配置类实现多端口启动,并提供了详细的代码供读者参考,需要的朋友可以参考下

一、简要概述

我们在开发Springboot Web工程中,一般通过在application.yml配置文件中使用server.port来指定唯一的http启动端口,那么Springboot Web工程支不支持指定多个HTTP端口启动呢,答案是肯定的!

二、Tomcat应用服务器

默认情况下,boot内置应用服务器为spring-boot-starter-tomcat

1,定义启动端口

为了跟系统配置server.port做区分,我们定义路径为server.http.ports,典型配置如下:

server:
  port: 8082
  servlet:
    context-path: /
    session:
      timeout: 1800
  http:
    ports: 80,8085

2,编写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); // 关键配置:当请求需要安全连接时,重定向到 HTTPS 端口
            return connector;
        }).collect(Collectors.toList()).toArray(new Connector[0]);
    }
}

3,运行结果

查看日志,可以看到我们成功在 8082 (http) 80 (http) 8085 (http)启动了应用。

_ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
[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应用服务器

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,8081

3,编写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,运行结果

查看日志,可以看到我们成功在 port(s) 443 (ssl, http/1.1), 80 (http/1.1), 8081 (http/1.1)启动了应用。

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
[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应用服务器

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端口的方法的详细内容,更多关于SpringBoot Web启动多个HTTP端口的资料请关注脚本之家其它相关文章!

相关文章

  • 详解java中spring里的三大拦截器

    详解java中spring里的三大拦截器

    在本篇文章里我们给大家详细讲述了java中spring里的三大拦截器相关知识点以及用法代码,需要的朋友们学习下。
    2018-10-10
  • 使用Aop的方式实现自动日志记录的方式详细介绍

    使用Aop的方式实现自动日志记录的方式详细介绍

    这篇文章主要介绍了使用Aop的方式实现自动日志记录,通过监听器去监听,当访问到具体的类方法,通过aop切面去获取访问的方法,然后将日志记录下来,就这种方式给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MyBatis使用注解开发实现步骤解析

    MyBatis使用注解开发实现步骤解析

    这篇文章主要介绍了MyBatis使用注解开发实现步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Spring Cloud Alibaba 之 Nacos教程详解

    Spring Cloud Alibaba 之 Nacos教程详解

    Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合性解决方案。这篇文章主要介绍了Spring Cloud Alibaba 之 Nacos的相关知识,需要的朋友可以参考下
    2020-11-11
  • Java基于Javafaker生成测试数据

    Java基于Javafaker生成测试数据

    这篇文章主要介绍了Java基于Javafaker生成测试数据的方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • 微信支付java版本之获取Access_token

    微信支付java版本之获取Access_token

    这篇文章主要介绍了微信支付java版本之获取Access_token,java如何获取Access_token,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Java并发工具辅助类代码实例

    Java并发工具辅助类代码实例

    这篇文章主要介绍了Java并发工具辅助类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring Security使用数据库登录认证授权

    Spring Security使用数据库登录认证授权

    本文主要介绍了Spring Security使用数据库登录认证授权,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 解决gateway配合nacos路由报错:Unable to find instance for XXX问题

    解决gateway配合nacos路由报错:Unable to find instance&

    这篇文章主要介绍了解决gateway配合nacos路由报错:Unable to find instance for XXX问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • spring中的DI步骤详解

    spring中的DI步骤详解

    本文主要介绍了bean的装配实现过程,通常对于简单数据类型数据初始主要在获得对象后,使用setter方法完成,所谓的装配主要是复杂数据类型的依赖注入,感兴趣的朋友一起看看吧
    2023-11-11

最新评论