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 .