SpringBoot单进程监听多端口
-
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.3</version> <relativePath/> </parent> <groupId>com.yang</groupId> <artifactId>multi-port</artifactId> <version>0.0.1-SNAPSHOT</version> <name>multi-port</name> <description>multi-port Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
-
application.properties
server.port=8080 server.ext-port=8081,8082
-
几个Java类
package com.yang.multiport; import org.apache.catalina.connector.Connector; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Arrays; import java.util.stream.Collectors; // @Import(PortConfig.class) @SpringBootApplication public class MultiPortApplication { public static void main(String[] args) { SpringApplication.run(MultiPortApplication.class, args); } } @RestController @RequestMapping("/test") class TestController { @GetMapping("/get") public String get() { return "ok"; } } @Configuration class PortConfig { @Value("${server.ext-port}") private String extPort; /** * SpringBoot-v1 * * @return */ /*@Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); Connector[] additionalConnectorArr = this.additionalConnector(); if (ArrayUtils.isNotEmpty(additionalConnectorArr)) { tomcatFactory.addAdditionalTomcatConnectors(additionalConnectorArr); } return tomcatFactory; }*/ /** * SpringBoot-v2 * * @return */ @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcatFactory = new TomcatServletWebServerFactory(); Connector[] additionalConnectorArr = this.additionalConnector(); if (ArrayUtils.isNotEmpty(additionalConnectorArr)) { tomcatFactory.addAdditionalTomcatConnectors(additionalConnectorArr); } return tomcatFactory; } /** * 根据配置的多端口创建连接器数组 * * @return */ private Connector[] additionalConnector() { if (StringUtils.isBlank(this.extPort)) { return null; } else { String[] portArr = this.extPort.split(","); Connector[] connectorArr = new Connector[portArr.length]; Arrays.stream(portArr).map(this::ctreateConnector).collect(Collectors.toList()).toArray(connectorArr); return connectorArr; } } /** * 根据端口创建连接器对象 * * @param port * @return */ private Connector ctreateConnector(String port) { // Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); // http1.1之BIO Connector connector = new Connector("org.apache.coyote.http11.Http11Nio2Protocol"); // http1.1之NIO2 connector.setScheme("http"); connector.setPort(Integer.valueOf(port)); return connector; } }
-
console输出
D:ProgramFilesJavajdk1.8.0_221injava.exe "-javaagent:D:ProgramFilesJetBrainsIntelliJIDEA2018.2.1IntelliJ IDEA 2018.2.1libidea_rt.jar=50340:D:ProgramFilesJetBrainsIntelliJIDEA2018.2.1IntelliJ IDEA 2018.2.1in" -Dfile.encoding=UTF-8 -classpath D:ProgramFilesJavajdk1.8.0_221jrelibcharsets.jar;D:ProgramFilesJavajdk1.8.0_221jrelibdeploy.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextaccess-bridge-64.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextcldrdata.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextdnsns.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextjaccess.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextjfxrt.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextlocaledata.jar;D:ProgramFilesJavajdk1.8.0_221jrelibext ashorn.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextsunec.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextsunjce_provider.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextsunmscapi.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextsunpkcs11.jar;D:ProgramFilesJavajdk1.8.0_221jrelibextzipfs.jar;D:ProgramFilesJavajdk1.8.0_221jrelibjavaws.jar;D:ProgramFilesJavajdk1.8.0_221jrelibjce.jar;D:ProgramFilesJavajdk1.8.0_221jrelibjfr.jar;D:ProgramFilesJavajdk1.8.0_221jrelibjfxswt.jar;D:ProgramFilesJavajdk1.8.0_221jrelibjsse.jar;D:ProgramFilesJavajdk1.8.0_221jrelibmanagement-agent.jar;D:ProgramFilesJavajdk1.8.0_221jrelibplugin.jar;D:ProgramFilesJavajdk1.8.0_221jrelib esources.jar;D:ProgramFilesJavajdk1.8.0_221jrelib t.jar;F:sourceCode argetclasses;E:appDatamavenRepoorgspringframeworkootspring-boot-starter-web2.4.3spring-boot-starter-web-2.4.3.jar;E:appDatamavenRepoorgspringframeworkootspring-boot-starter2.4.3spring-boot-starter-2.4.3.jar;E:appDatamavenRepoorgspringframeworkootspring-boot2.4.3spring-boot-2.4.3.jar;E:appDatamavenRepoorgspringframeworkootspring-boot-autoconfigure2.4.3spring-boot-autoconfigure-2.4.3.jar;E:appDatamavenRepoorgspringframeworkootspring-boot-starter-logging2.4.3spring-boot-starter-logging-2.4.3.jar;E:appDatamavenRepochqoslogbacklogback-classic1.2.3logback-classic-1.2.3.jar;E:appDatamavenRepochqoslogbacklogback-core1.2.3logback-core-1.2.3.jar;E:appDatamavenRepoorgapachelogginglog4jlog4j-to-slf4j2.13.3log4j-to-slf4j-2.13.3.jar;E:appDatamavenRepoorgapachelogginglog4jlog4j-api2.13.3log4j-api-2.13.3.jar;E:appDatamavenRepoorgslf4jjul-to-slf4j1.7.30jul-to-slf4j-1.7.30.jar;E:appDatamavenRepojakartaannotationjakarta.annotation-api1.3.5jakarta.annotation-api-1.3.5.jar;E:appDatamavenRepoorgyamlsnakeyaml1.27snakeyaml-1.27.jar;E:appDatamavenRepoorgspringframeworkootspring-boot-starter-json2.4.3spring-boot-starter-json-2.4.3.jar;E:appDatamavenRepocomfasterxmljacksoncorejackson-databind2.11.4jackson-databind-2.11.4.jar;E:appDatamavenRepocomfasterxmljacksoncorejackson-annotations2.11.4jackson-annotations-2.11.4.jar;E:appDatamavenRepocomfasterxmljacksoncorejackson-core2.11.4jackson-core-2.11.4.jar;E:appDatamavenRepocomfasterxmljacksondatatypejackson-datatype-jdk82.11.4jackson-datatype-jdk8-2.11.4.jar;E:appDatamavenRepocomfasterxmljacksondatatypejackson-datatype-jsr3102.11.4jackson-datatype-jsr310-2.11.4.jar;E:appDatamavenRepocomfasterxmljacksonmodulejackson-module-parameter-names2.11.4jackson-module-parameter-names-2.11.4.jar;E:appDatamavenRepoorgspringframeworkootspring-boot-starter-tomcat2.4.3spring-boot-starter-tomcat-2.4.3.jar;E:appDatamavenRepoorgapache omcatembed omcat-embed-core9.0.43 omcat-embed-core-9.0.43.jar;E:appDatamavenRepoorgglassfishjakarta.el3.0.3jakarta.el-3.0.3.jar;E:appDatamavenRepoorgapache omcatembed omcat-embed-websocket9.0.43 omcat-embed-websocket-9.0.43.jar;E:appDatamavenRepoorgspringframeworkspring-web5.3.4spring-web-5.3.4.jar;E:appDatamavenRepoorgspringframeworkspring-beans5.3.4spring-beans-5.3.4.jar;E:appDatamavenRepoorgspringframeworkspring-webmvc5.3.4spring-webmvc-5.3.4.jar;E:appDatamavenRepoorgspringframeworkspring-aop5.3.4spring-aop-5.3.4.jar;E:appDatamavenRepoorgspringframeworkspring-context5.3.4spring-context-5.3.4.jar;E:appDatamavenRepoorgspringframeworkspring-expression5.3.4spring-expression-5.3.4.jar;E:appDatamavenRepoorgapachecommonscommons-lang33.8.1commons-lang3-3.8.1.jar;E:appDatamavenRepoorgslf4jslf4j-api1.7.30slf4j-api-1.7.30.jar;E:appDatamavenRepoorgspringframeworkspring-core5.3.4spring-core-5.3.4.jar;E:appDatamavenRepoorgspringframeworkspring-jcl5.3.4spring-jcl-5.3.4.jar com.yang.multport.MultiPortApplication . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ ( ( )\___ | '_ | '_| | '_ / _` | \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.4.3) 2021-03-02 00:14:16.333 INFO 14596 --- [ main] com.yang.multport.MultiPortApplication : Starting MultiPortApplication using Java 1.8.0_221 on LAPTOP-7FSASCN3 with PID 14596 (F:sourceCode argetclasses started by Yang in F:sourceCode) 2021-03-02 00:14:16.340 INFO 14596 --- [ main] com.yang.multport.MultiPortApplication : No active profile set, falling back to default profiles: default 2021-03-02 00:14:19.344 INFO 14596 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 8081 (http) 8082 (http) 2021-03-02 00:14:19.375 INFO 14596 --- [ main] o.a.coyote.http11.Http11Nio2Protocol : Initializing ProtocolHandler ["http-nio2-8081"] 2021-03-02 00:14:19.391 INFO 14596 --- [ main] o.a.coyote.http11.Http11Nio2Protocol : Initializing ProtocolHandler ["http-nio2-8082"] 2021-03-02 00:14:19.391 INFO 14596 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2021-03-02 00:14:19.391 INFO 14596 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.43] 2021-03-02 00:14:19.535 INFO 14596 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2021-03-02 00:14:19.535 INFO 14596 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3047 ms 2021-03-02 00:14:19.824 INFO 14596 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2021-03-02 00:14:20.079 INFO 14596 --- [ main] o.a.coyote.http11.Http11Nio2Protocol : Starting ProtocolHandler ["http-nio2-8081"] 2021-03-02 00:14:20.080 INFO 14596 --- [ main] o.a.coyote.http11.Http11Nio2Protocol : Starting ProtocolHandler ["http-nio2-8082"] 2021-03-02 00:14:20.087 INFO 14596 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) 8081 (http) 8082 (http) with context path '' 2021-03-02 00:14:20.104 INFO 14596 --- [ main] com.yang.multport.MultiPortApplication : Started MultiPortApplication in 4.942 seconds (JVM running for 6.475) 2021-03-02 00:14:50.763 INFO 14596 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2021-03-02 00:14:50.764 INFO 14596 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2021-03-02 00:14:50.766 INFO 14596 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms