Contents

Spring Boot 2中的容器配置

1. 概述

在本快速教程中,我们将了解如何 在 Spring Boot 2 中替换EmbeddedServletContainerCustomizerConfigurableEmbeddedServletContainer

这些类是 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("");
     }
}

在这里,我们正在自定义 servlet 容器的端口和上下文路径。

实现此目的的另一种可能性是使用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作为已删除的JettyEmbeddedServletContainerFactoryUndertowEmbeddedServletContainerFactory的等价物。