• 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
      
    学习使我充实,分享给我快乐!
  • 相关阅读:
    POJ3709 K-Anonymous Sequence 斜率优化DP
    POJ3233 Matrix Power Series
    第六周 Leetcode 446. Arithmetic Slices II
    POJ1743 Musical Theme 最长重复子串 利用后缀数组
    Ural 1517. Freedom of Choice 后缀数组
    iOS跳转到另一个程序
    上传源码到github
    NSTimer用法,暂停,继续,初始化
    iOS中多线程原理与runloop介绍
    NSRunLoop 概述和原理
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/14466812.html
Copyright © 2020-2023  润新知