1. 概述
當我們在 Spring Boot 應用程序中啓用或禁用嵌入式 Tomcat 服務器時,需要根據應用程序的要求考慮不同的方法。默認情況下,Spring Boot 提供了嵌入式 Tomcat 服務器,但在某些情況下,我們可能想要禁用它。
對於需要嵌入式服務器的應用程序,我們可以使用默認配置。但是,對於不暴露 Web 端點或需要作為後台服務運行的應用程序,禁用 Tomcat 可以優化資源利用率。
在本教程中,我們將探討何時啓用或禁用嵌入式 Tomcat 服務器以及如何使用 Spring Boot 配置文件動態實現此功能。
2. 理解 Spring Boot 中的嵌入式 Tomcat
Spring Boot 通過將嵌入式 Tomcat 服務器打包到應用程序的可執行 JAR 文件中,簡化了應用程序部署。這種方法消除了安裝和配置外部 Tomcat 實例的需求,使開發和部署更加高效。
Spring Boot 使用 Spring Boot Starter 來包含用於嵌入式 Tomcat 的必要依賴項。 默認的 Starter,spring-boot-starter-web,在類路徑中存在時,會自動配置和初始化 Tomcat。
2.1. 嵌入式 Tomcat 的優勢
Spring Boot 的嵌入式 Tomcat 服務器提供以下優勢:
- 簡化部署: 無需安裝外部 Tomcat 服務器
- 自包含應用程序: 應用程序可以打包為 JAR 文件並在任何地方運行
- 自動配置: Spring Boot 根據依賴關係自動配置 Tomcat
- 靈活性: 可以輕鬆地用 Jetty 或 Undertow 等其他嵌入式服務器替換
2.2. 何時禁用 Tomcat 服務器
雖然嵌入式 Tomcat 有用,但在某些情況下禁用它是有益的:
- 非 Web 應用程序:不處理 HTTP 請求的應用程序,例如命令行工具或批處理作業
- 使用替代服務器的微服務:某些服務可能使用專門的 Web 服務器,如 Nginx
- 資源優化:禁用 Tomcat 可以減少內存和 CPU 使用率
3. 配置 Spring Boot 配置文件
Spring Boot 提供了 spring.profiles.active 屬性,用於定義環境特定的配置。我們可以創建基於不同配置文件的配置,從而控制嵌入式 Tomcat 服務器是否啓用。
為了定義配置,我們通常會創建單獨的配置文件,例如:
- application-dev.properties (用於啓用 Tomcat 的開發環境)
- application-batch.properties (用於無 Tomcat 的批量處理)
4. 通過配置禁用嵌入式 Tomcat
Spring Boot 根據 spring.main.web-application-type 屬性來確定是否啓用嵌入式 Web 服務器。將該屬性設置為 NONE 可以禁用嵌入式 Tomcat。
要通過配置進行此操作,請修改 application-batch.properties 文件:
spring.main.web-application-type=NONE當此配置啓用時,Spring Boot 不會啓動 Tomcat,而是將應用程序視為非 Web 服務。
或者,我們也可以使用 YAML 配置此設置:
spring:
main:
web-application-type: NONE
5. 不同環境配置示例
我們來配置一個應用程序,使用兩個環境:
- 開發環境 (dev) – Tomcat 已啓用 (默認設置)。
- 批處理環境 (batch) – Tomcat 已禁用。
為了確保嵌入式 Tomcat 服務器正常啓動,我們將在 application-dev.properties 文件中設置屬性:
spring.main.web-application-type=SERVLET為了禁用我們的嵌入式 Tomcat 服務器用於批量處理,我們應該在我們的 application-batch.properties文件中設置該屬性:
spring.main.web-application-type=NONE
6. 切換到不同配置文件
一旦我們定義了多個配置文件,可以通過 application.properties 文件激活所需的配置文件:
spring.profiles.active=batch
當然,以下是翻譯後的內容:
或者,我們也可以將其作為命令行參數傳遞:
java -Dspring.profiles.active=batch -jar myapp.jar這種靈活性使我們能夠在開發、測試或生產部署過程中,根據需要在基於 Web 的模式和非基於 Web 的模式之間切換。
7. 結論
Spring Boot 允許通過使用配置文件靈活配置嵌入式 Tomcat 服務器。通過利用 <em >spring.main.web-application-type</em >,我們可以在需要時禁用 Tomcat,用於非 Web 應用程序,從而優化資源使用和部署配置。 使用基於配置的設置或動態 Java 邏輯,確保我們的應用程序能夠無縫地適應不同的環境。