J'essaie de configurer une application dans Spring Boot avec deux ports différents, mais je ne l'ai pas encore. Ma première aproximation a été avec deux contrôleurs et j'ai défini un @Bean à l'intérieur des deux contrôleurs avec container.setPort (8080); Et ma deuxième approximation a été d'ajouter la dépendance de l'actionneur et de changer le port de la gestion, mais mon application ne fonctionne pas. "Adresse déjà utilisée: bind", Comment configurer une application avec deux ports? Je veux un port pour l'administrateur et l'autre port est pour les consultations de mon api.
Comme cela a été mentionné précédemment, server.port
et management.port
de même que management.context-path
Les propriétés peuvent être définies pour que le conteneur intégré écoute sur différents ports (propriétés liées à la gestion pour accéder aux points de terminaison Actuator
).
Pour écouter sur des ports autres que server.port
et management.port
:
@Configuration
public class EmbeddedTomcatConfiguration {
@Value("${server.additionalPorts}")
private String additionalPorts;
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory Tomcat = new TomcatEmbeddedServletContainerFactory();
Connector[] additionalConnectors = this.additionalConnector();
if (additionalConnectors != null && additionalConnectors.length > 0) {
Tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return Tomcat;
}
private Connector[] additionalConnector() {
if (StringUtils.isBlank(this.additionalPorts)) {
return null;
}
String[] ports = this.additionalPorts.split(",");
List<Connector> result = new ArrayList<>();
for (String port : ports) {
Connector connector = new Connector("org.Apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(Integer.valueOf(port));
result.add(connector);
}
return result.toArray(new Connector[] {});
}
}
application.yml
server:
port: ${appPort:8800}
additionalPorts: 8881,8882
Application.Java
@SpringBootApplication
@ComponentScan(...)
@Import(EmbeddedTomcatConfiguration.class)
public Application {
public static void main(String[] args) {
SpringApplication.run(Application .class, args);
}
}
J'ai récemment blogué sur ce sujet à http://tech.asimio.net/2016/12/15/Configuring-Tomcat-to-Listen-on-Multiple-ports-using-Spring-Boot.html =
Depuis springboot 2, EmbeddedServletContainerFactory
mentionné dans solution ootero n'est plus disponible, vous devez donc utiliser TomcatServletWebServerFactory
ou TomcatReactiveWebServerFactory
selon votre contexte.
La solution reste la même en dehors de l'injection d'usine:
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory Tomcat = new TomcatServletWebServerFactory();
Connector[] additionalConnectors = this.additionalConnector();
if (additionalConnectors != null && additionalConnectors.length > 0) {
Tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return Tomcat;
}
C'est un ancien article et le problème est probablement déjà résolu, mais je voulais quand même dire mon avis pour d'autres lecteurs. Je pense que c'est une mauvaise façon de penser et je ne vois pas vraiment quand vous aurez besoin d'une application avec deux ports.
Spring Boot est créé pour être utilisé dans l'architecture de microservices. Donc, dans ce cas, vous devez séparer votre application en 2 applications, où chacune aura son propre port. C'est bon pour différentes raisons, une des plus évidentes est que votre API peut avoir 1.000.000 de demandes par jour et 10 administrateurs seulement.
Très probablement, vous avez beaucoup de code partagé, mais ce sera la troisième application que vous devrez empaqueter en tant que jar et l'importer dans les deux projets api et admin.