Конфигурация контейнера в 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.