Configuração de contêiner no Spring Boot 2
1. Visão geral
Neste tutorial rápido, veremos como substituirEmbeddedServletContainerCustomizereConfigurableEmbeddedServletContainer no Spring Boot 2.
Essas classes faziam parte das versões anteriores do Spring Boot, mas foram removidas a partir do Spring Boot 2. Claro,the functionality is still available through the interface WebServerFactoryCustomizer and the class *ConfigurableServletWebServerFactory*.
Vamos dar uma olhada em como usá-los.
2. Antes do Spring Boot 2
Primeiro, vamos dar uma olhada em uma configuração que usa a classe e interface antigas e que precisamos substituir:
@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setPort(8080);
container.setContextPath("");
}
}
Aqui, estamos personalizando a porta do contêiner de servlet e o caminho de contexto.
Outra possibilidade de conseguir isso é usar subclasses mais específicas deConfigurableEmbeddedServletContainer, para um tipo de contêiner, como 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. Atualize para Spring Boot 2
No Spring Boot 2,the EmbeddedServletContainerCustomizer interface is replaced by WebServerFactoryCustomizer, while the ConfigurableEmbeddedServletContainer class is replaced with ConfigurableServletWebServerFactory.
Vamos reescrever o exemplo anterior para um projeto Spring Boot 2:
public class CustomContainer implements
WebServerFactoryCustomizer {
public void customize(ConfigurableServletWebServerFactory factory) {
factory.setPort(8080);
factory.setContextPath("");
}
}
E o segundo exemplo agora usará umTomcatServletWebServerFactory:
@Component
public class CustomContainer implements
WebServerFactoryCustomizer {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.setContextPath("");
factory.setPort(8080);
}
}
Da mesma forma, temosJettyServletWebServerFactory eUndertowServletWebServerFactory como equivalentes para osJettyEmbeddedServletContainerFactoryeUndertowEmbeddedServletContainerFactory. removidos
4. Conclusão
Esta breve descrição mostrou como corrigir um problema que poderíamos encontrar ao atualizar um aplicativo Spring Boot para a versão 2.x.
Um exemplo de projeto Spring Boot 2 está disponível em nossoGitHub repository.