Конфигурация контейнера в Spring Boot 2

Конфигурация контейнера в Spring Boot 2

1. обзор

В этом кратком руководстве мы рассмотрим, как заменитьEmbeddedServletContainerCustomizer иConfigurableEmbeddedServletContainer в Spring Boot 2.

Эти классы были частью предыдущих версий Spring Boot, но были удалены, начиная с Spring Boot 2. Конечно,the functionality is still available through the interface WebServerFactoryCustomizer and the class *ConfigurableServletWebServerFactory*.

Давайте посмотрим, как их использовать.

2. До Spring Boot 2

Во-первых, давайте посмотрим на конфигурацию, в которой используются старый класс и интерфейс, которые нам нужно будет заменить:

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(8080);
        container.setContextPath("");
     }
}

Здесь мы настраиваем порт контейнера сервлета и путь контекста.

Другой способ добиться этого - использовать более конкретные подклассыConfigurableEmbeddedServletContainer, для типа контейнера, такого как Tomcat:

@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. Обновление до Spring Boot 2

В Spring Boot 2the EmbeddedServletContainerCustomizer interface is replaced by WebServerFactoryCustomizer, while the ConfigurableEmbeddedServletContainer class is replaced with ConfigurableServletWebServerFactory.

Давайте перепишем предыдущий пример для проекта Spring Boot 2:

public class CustomContainer implements
  WebServerFactoryCustomizer {

    public void customize(ConfigurableServletWebServerFactory factory) {
        factory.setPort(8080);
        factory.setContextPath("");
     }
}

И второй пример теперь будет использоватьTomcatServletWebServerFactory:

@Component
public class CustomContainer implements
  WebServerFactoryCustomizer {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.setContextPath("");
        factory.setPort(8080);
    }
}

Точно так же у нас естьJettyServletWebServerFactory иUndertowServletWebServerFactory как эквиваленты удаленныхJettyEmbeddedServletContainerFactory иUndertowEmbeddedServletContainerFactory.

4. Заключение

В этой краткой статье показано, как устранить проблему, с которой мы могли бы столкнуться при обновлении приложения Spring Boot до версии 2.x.

Пример проекта Spring Boot 2 доступен в нашемGitHub repository.