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