Spring Boot 2中的容器配置
1. 概述
在本快速教程中,我们将了解如何 在 Spring Boot 2 中替换EmbeddedServletContainerCustomizer和ConfigurableEmbeddedServletContainer。
这些类是 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作为已删除的JettyEmbeddedServletContainerFactory和UndertowEmbeddedServletContainerFactory的等价物。