Containerkonfiguration im Spring Boot 2
1. Überblick
In diesem kurzen Tutorial erfahren Sie, wie Sie dieEmbeddedServletContainerCustomizer undConfigurableEmbeddedServletContainer in Spring Boot 2 ersetzen.
Diese Klassen waren Teil früherer Versionen von Spring Boot, wurden jedoch ab Spring Boot 2 entfernt. Natürlichthe functionality is still available through the interface WebServerFactoryCustomizer and the class *ConfigurableServletWebServerFactory*.
Schauen wir uns an, wie Sie diese verwenden.
2. Vor dem Spring Boot 2
Schauen wir uns zunächst eine Konfiguration an, die die alte Klasse und Schnittstelle verwendet und die wir ersetzen müssen:
@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setPort(8080);
container.setContextPath("");
}
}
Hier passen wir den Port und den Kontextpfad des Servlet-Containers an.
Eine andere Möglichkeit, dies zu erreichen, besteht darin, spezifischere Unterklassen vonConfigurableEmbeddedServletContainer, für einen Containertyp wie Tomcat zu verwenden:
@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory tomcatContainer =
(TomcatEmbeddedServletContainerFactory) container;
tomcatContainer.setPort(8080);
tomcatContainer.setContextPath("");
}
}
}
3. Upgrade auf Spring Boot 2
In Spring Boot 2the EmbeddedServletContainerCustomizer interface is replaced by WebServerFactoryCustomizer, while the ConfigurableEmbeddedServletContainer class is replaced with ConfigurableServletWebServerFactory.
Schreiben wir das vorherige Beispiel für ein Spring Boot 2-Projekt neu:
public class CustomContainer implements
WebServerFactoryCustomizer {
public void customize(ConfigurableServletWebServerFactory factory) {
factory.setPort(8080);
factory.setContextPath("");
}
}
Im zweiten Beispiel wird nun einTomcatServletWebServerFactory: verwendet
@Component
public class CustomContainer implements
WebServerFactoryCustomizer {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.setContextPath("");
factory.setPort(8080);
}
}
In ähnlicher Weise haben wir dieJettyServletWebServerFactory undUndertowServletWebServerFactory als Äquivalente für die entferntenJettyEmbeddedServletContainerFactory undUndertowEmbeddedServletContainerFactory.
4. Fazit
Diese kurze Beschreibung zeigt, wie ein Problem behoben werden kann, das beim Upgrade einer Spring Boot-Anwendung auf Version 2.x auftreten kann.
Ein Beispiel für ein Spring Boot 2-Projekt finden Sie in unserenGitHub repository.