[JAVA] Prend en charge le multi-port avec SpringBoot

environnement

introduction

Parce qu'il était nécessaire de fermer le port sur l'écran et d'ouvrir le même écran sur un autre port Un rappel que SpringBoot doit implémenter plusieurs ports. Une seule application peut être lancée et plusieurs ports de port sont créés dans le Tomcat inclus.

la mise en oeuvre

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[] {});
    }
}

Chargez la classe de configuration créée ci-dessus au démarrage.

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);
    }
}

Vérification

Exécutez-le et vérifiez-le sur Git Bash. C'est un contrôleur simple qui renvoie simplement une chaîne lorsque vous accédez au point de terminaison.

$ 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

Prend en charge le multi-port avec SpringBoot
Prend en charge la multilinguisme avec Rails!
Changer de port avec SpringBoot
Hello World avec SpringBoot / Gradle
Dessiner un écran avec Thymeleaf dans SpringBoot
Implémenter le lien texte avec Springboot + Thymeleaf
Présentation de Flyway avec SpringBoot + Maven + PostgreSQL
À propos de la création d'applications avec Springboot
Changer d'environnement avec l'argument de démarrage dans SpringBoot
[Java] Connexion avec la base de données locale (IntelliJ + SpringBoot)
J'ai essayé d'utiliser OnlineConverter avec SpringBoot + JODConverter
Ajout d'une déclaration XML lors du retour de xml avec spring-boot
Transaction distribuée avec SpringBoot + PostgreSql + mybatis + NarayanaJTA
Utiliser SSIServlet avec Tomcat intégré SpringBoot 2.2.4
Désérialiser XML dans une collection avec spring-boot