[JAVA] Unterstützt Multi-Port mit SpringBoot

Umgebung

Einführung

Weil der Port auf dem Bildschirm geschlossen und derselbe Bildschirm an einem anderen Port geöffnet werden musste Eine Erinnerung daran, dass SpringBoot mehrere Ports implementieren muss. Es kann nur eine Anwendung gestartet werden, und im enthaltenen Tomcat werden mehrere Port-Ports erstellt.

Implementierung

application.yml


server:
  port : 8080
  additionalPorts: 8081, 8082

EmbeddedTomcatConfiguration.java


package org.example.configuration;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

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.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class EmbeddedTomcatConfiguration implements WebMvcConfigurer {
    @Value("${server.port}")
    private String serverPort;

    @Value("${management.port:${server.port}}")
    private String managementPort;

    @Value("${server.additionalPorts:null}")
    private String additionalPorts;

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> servletContainer() {

        return factory -> {
            Connector[] additionalConnectors = additionalConnector();
            if (additionalConnectors.length > 0) {
                factory.addAdditionalTomcatConnectors(additionalConnectors);
            }
        };
    }

    private Connector[] additionalConnector() {
        if (this.additionalPorts == null || this.additionalPorts.equals("")) {
            return new Connector[0];
        }
        Set<String> defaultPorts = new HashSet<>(Arrays.asList(this.serverPort, this.managementPort));
        String[] ports = this.additionalPorts.split(",");
        List<Connector> result = new ArrayList<>();
        for (String port : ports) {
            if (StringUtils.hasText(port) && !"null".equalsIgnoreCase(port) && !defaultPorts.contains(port)) {
                Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
                connector.setScheme("http");
                connector.setPort(Integer.parseInt(port.trim()));
                result.add(connector);
            }
        }
        return result.toArray(new Connector[] {});
    }
}

Laden Sie die oben beim Start erstellte Konfigurationsklasse.

BootApp.java


package org.example;

import org.example.configuration.EmbeddedTomcatConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@Import(EmbeddedTomcatConfiguration.class)
public class BootApp {

    public static void main(String[] args) {
        SpringApplication.run(BootApp.class, args);
    }
}

Bestätigung

Führen Sie es aus und überprüfen Sie es auf Git Bash. Es ist ein einfacher Controller, der nur eine Zeichenfolge zurückgibt, wenn Sie auf den Endpunkt zugreifen.

$ curl http://localhost:8080/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0    149      0 --:--:-- --:--:-- --:--:--   149
Hello World!

$ curl http://localhost:8081/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0    812      0 --:--:-- --:--:-- --:--:--   866
Hello World!

$ curl http://localhost:8082/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0    866      0 --:--:-- --:--:-- --:--:--   866
Hello World!

Recommended Posts

Unterstützt Multi-Port mit SpringBoot
Unterstützt Mehrsprachigkeit mit Rails!
Ändern Sie den Port mit SpringBoot
Hallo Welt mit SpringBoot / Gradle
Zeichnen Sie den Bildschirm mit Thymeleaf in SpringBoot
Implementieren Sie einen Textlink mit Springboot + Thymeleaf
Einführung in Flyway mit SpringBoot + Maven + PostgreSQL
Informationen zum Erstellen von Apps mit Springboot
Wechseln Sie die Umgebung mit dem Boot-Argument in SpringBoot
[Java] Verbindung mit lokaler Datenbank (IntelliJ + SpringBoot)
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
XML-Deklaration hinzugefügt, wenn XML mit Spring-Boot zurückgegeben wird
Verteilte Transaktion mit SpringBoot + PostgreSql + mybatis + NarayanaJTA
Verwenden Sie SSIServlet mit dem in SpringBoot 2.2.4 integrierten Tomcat
Deserialisieren Sie XML mit Spring-Boot in eine Sammlung