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 中,<em>EmbeddedServletContainerCustomizer</em> 接口被替換為 <em>WebServerFactoryCustomizer</em> 接口,同時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的替代方案。
4. 結論
本文檔展示了升級 Spring Boot 應用到 2.x 版本時可能遇到的問題解決方案。