Configuração de contêiner no Spring Boot 2

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.