Containerkonfiguration in Spring Boot 2

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.