SpringBoot单进程监听多端口

SpringBoot单进程监听多端口

  1. 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>
    
  2. application.properties

    server.port=8080
    server.ext-port=8081,8082
    
  3. 几个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;
        }
    
    }
    
  4. 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
    
学习使我充实,分享给我快乐!
原文地址:https://www.cnblogs.com/JaxYoun/p/14466812.html