Перейти к основному содержимому

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

· 2 мин. чтения

1. Обзор

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

Эти классы были частью предыдущих версий Spring Boot, но были удалены, начиная с Spring Boot 2. Конечно, функциональность по-прежнему доступна через интерфейс WebServerFactoryCustomizer и класс 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 2 интерфейс EmbeddedServletContainerCustomizer заменен на WebServerFactoryCustomizer, а класс ConfigurableEmbeddedServletContainer заменен на ConfigurableServletWebServerFactory.

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

public class CustomContainer implements 
WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

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

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

@Component
public class CustomContainer implements
WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

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

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

4. Вывод

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

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