知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 容器配置

DevOps,Spring Boot
HongKong
4
01:45 PM · Dec 06 ,2025

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 中,<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);
    }
}

同樣,我們有JettyServletWebServerFactoryUndertowServletWebServerFactory作為移除的JettyEmbeddedServletContainerFactoryUndertowEmbeddedServletContainerFactory的替代方案。

4. 結論

本文檔展示了升級 Spring Boot 應用到 2.x 版本時可能遇到的問題解決方案。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.