知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 無 Web 服務器

Spring Boot
HongKong
4
12:47 PM · Dec 06 ,2025

1. 簡介

Spring Boot 是一個優秀的框架,可用於快速創建各種用例的全新 Java 應用程序。其中最受歡迎的應用是作為 Web 服務器,利用支持的眾多嵌入式 Servlet 容器和模板引擎。

然而,Spring Boot 還有許多用途不需要 Web 服務器:命令行應用程序、任務調度、批量或流處理、無服務器應用程序等等。

在本教程中,我們將探討在不使用 Web 服務器的情況下使用 Spring Boot 的各種方法。

2. 使用依賴項

要防止 Spring Boot 應用程序啓動嵌入式 Web 服務器,最簡單的方法是不要在依賴項中包含 Web 服務器啓動器

這意味着不要在 Maven POM 文件或 Gradle 構建文件中包含 spring-boot-starter-web 依賴項。相反,我們應該使用更基本的 spring-boot-starter 依賴項。

請記住,Tomcat 依賴項可能作為傳遞依賴項包含在我們的應用程序中。在這種情況下,我們可能需要排除提供它的依賴項中的 Tomcat 庫。

3. 修改 Spring 應用

另一種禁用 Spring Boot 內嵌 Web 服務器的方法是使用代碼。我們可以使用 SpringApplicationBuilder

new SpringApplicationBuilder(MainApplication.class)
  .web(WebApplicationType.NONE)
  .run(args);

我們可以使用對 SpringApplication 的引用:

SpringApplication application = new SpringApplication(MainApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);

無論採用哪種方式,我們能夠利用 servlet 和 container API 在 classpath 上可用,從而獲得優勢。這意味着我們仍然可以在不啓動 web 服務器的情況下使用 web 服務器庫。這在例如,我們希望使用它們編寫測試或在自己的代碼中使用其 API 時非常有用。

4. 使用應用程序屬性

使用代碼禁用 Web 服務器是一種靜態選項,無論我們將其部署到何處,都會影響我們的應用程序。但是,如果我們要根據特定情況創建 Web 服務器,該怎麼辦?

在這種情況下,我們可以使用 Spring 應用程序屬性:

spring.main.web-application-type=none

或者使用等效的 YAML:

spring:
  main:
    web-application-type: none

這種方法的優勢在於,我們可以條件啓用 Web 服務器。

通過使用 Spring 配置文件或條件表達式,我們可以控制 Web 服務器在不同部署環境中的行為。

例如,我們可以僅在開發環境中運行 Web 服務器,以暴露指標或其他 Spring 端點,同時在生產環境中禁用它以出於安全考慮。

請注意,較早版本的 Spring Boot 使用一個名為 web-environmentboolean 屬性來啓用和禁用 Web 服務器。隨着 Spring Boot 中傳統和反應式容器的採用,該屬性已被重命名,現在使用枚舉。

5. 結論

有許多原因可以促使我們創建 Spring Boot 應用程序而不使用 Web 服務器。在本教程中,我們已經看到了多種實現方法。每種方法都有其自身的優缺點,因此我們應該選擇最符合我們需求的方案。

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

發佈 評論

Some HTML is okay.