1. 概述
Spring Boot Web 應用程序默認包含一個預配置的嵌入式 Web 服務器。但在某些情況下,我們可能需要 修改默認配置以滿足自定義需求。
在本教程中,我們將探討通過 application.properties 文件配置 Tomcat 嵌入式服務器的幾個常見用例。
2. 常見嵌入式 Tomcat 配置
This section describes common configurations for deploying Tomcat as an embedded server within an application. These configurations cover aspects such as logging, security, and resource management.
Logging
Tomcat's logging capabilities can be configured using several methods:
catalina.sh(orcatalina.bat): This file contains global logging settings. You can modify thejava.util.logging.config.fileproperty to point to a custom logging configuration file.logging.properties: This file allows you to define logging levels and output destinations for individual applications. Common settings includelog4j.logger.root=ERRORandlog4j.appender.file=FileAppender.- Log4j: Log4j is a popular logging framework that provides flexible and powerful logging capabilities. You can configure Log4j using the
logging.propertiesfile or through programmatic configuration.
Security
Tomcat provides several security features, including:
- SSL/TLS Support: Tomcat supports SSL/TLS for secure communication. You can configure SSL/TLS settings in the
server.xmlfile. - Authentication: Tomcat supports various authentication mechanisms, such as Basic Authentication and LDAP Authentication.
- Authorization: Tomcat allows you to control access to resources based on user roles and permissions.
Resource Management
Tomcat provides several mechanisms for managing resources, such as:
- JNDI: Tomcat uses JNDI to access resources from external sources.
- JDBC: Tomcat supports JDBC for accessing relational databases.
- JMS: Tomcat supports JMS for accessing message queues.
2.1. 服務器地址和端口
最常見的配置項是我們可能希望修改的端口號:
server.port=80如果未提供 server.port 參數,則默認為 8080
在某些情況下,我們可能希望將網絡地址設置為服務器應該綁定的地址。換句話説,我們定義了服務器將監聽的 IP地址:
server.address=my_custom_ip默認情況下,值設置為 0.0.0.0,允許通過所有 IPv4 地址進行連接。設置其他值,例如 localhost – 127.0.0.1,將使服務器更嚴格地選擇連接。
2.2. 錯誤處理
默認情況下,Spring Boot 提供了一個標準錯誤 Web 頁面。該頁面被稱為 Whitelabel。它默認啓用,但如果不想顯示任何錯誤信息,可以禁用它:
server.error.whitelabel.enabled=false默認路徑為 Whitelabel 為 /error。可以通過設置 server.error.path 參數來自定義它:
server.error.path=/user-error我們還可以設置屬性,以確定呈現關於錯誤的哪些信息。例如,我們可以包含錯誤消息和堆棧跟蹤:
server.error.include-exception=true
server.error.include-stacktrace=always我們的教程“異常消息處理及自定義白標錯誤頁面”更詳細地介紹了在 Spring Boot 中處理錯誤的方法。
2.3. 服務器連接
當在資源受限的容器中運行時,我們可能希望降低 CPU 和內存負載。 一種實現方法是限制應用程序可以處理的併發請求數量。相反,我們可以增加此值以利用更多可用資源,從而獲得更好的性能。
在 Spring Boot 中,我們可以定義最大 Tomcat 工作線程數量:
server.tomcat.threads.max=200在配置Web服務器時,也可能需要設置服務器連接超時時間。這代表服務器在連接後等待客户端發送請求的最大時間,在此時間未收到響應後,連接將被關閉:
server.connection-timeout=5s我們還可以定義請求頭部的最大大小:
server.max-http-header-size=8KB請求報文的最大大小:
server.tomcat.max-swallow-size=2MB或者整個請求的最大大小:
server.tomcat.max-http-post-size=2MB2.4. SSL
為了在我們的 Spring Boot 應用程序中啓用 SSL 支持,我們需要將 server.ssl.enabled 屬性設置為 true,並定義一個 SSL 協議:
server.ssl.enabled=true
server.ssl.protocol=TLS我們還應該配置密碼、類型和用於存儲證書的密鑰庫路徑:
server.ssl.key-store-password=my_password
server.ssl.key-store-type=keystore_type
server.ssl.key-store=keystore-path我們還需要定義別名,以識別密鑰存儲中的密鑰:
server.ssl.key-alias=tomcat關於 SSL 配置的更多信息,請參閲我們使用自簽名證書在 Spring Boot 文章中的 HTTPS 使用方法。
2.5. Tomcat 服務器訪問日誌
Tomcat 訪問日誌在統計頁面訪問次數、用户會話活動等方面具有重要價值。
要啓用訪問日誌,只需設置:
server.tomcat.accesslog.enabled=true我們還應該配置其他參數,例如日誌文件中的目錄名、前綴、後綴和日期格式:
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.file-date-format=yyyy-MM-dd
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.suffix=.log3. 內嵌 Tomcat 的版本
我們無法通過配置我們的 application.properties 文件來更改 Tomcat 的使用版本。這涉及到一些複雜性,主要取決於我們是否使用了 spring-boot-starter-parent。
在繼續之前,我們必須意識到,每個 Spring Boot 發佈版本都是針對特定的 Tomcat 版本進行設計和測試的。如果更改了該版本,我們可能會遇到一些意外的兼容性問題。
3.1. 使用 spring-boot-starter-parent
如果使用 Maven 並將項目配置為繼承自 spring-boot-starter-parent,我們可以通過在我們的 pom.xml文件中覆蓋特定的屬性來覆蓋單個依賴項。
考慮到這一點,要更新 Tomcat 版本,必須使用 tomcat.version 屬性:
<properties>
<tomcat.version>9.0.44</tomcat.version>
</properties>3.2. 使用 spring-boot-dependencies >
在某些情況下,我們可能不想或不能使用 spring-boot-starter-parent。例如,如果我們在 Spring Boot 項目中使用自定義父模塊。在這種情況下,我們通常會使用 spring-boot-dependency 以獲得依賴管理的好處。
這種配置方式,我們無法通過 Maven 屬性覆蓋單個依賴項,如前一節所示。
為了實現相同的目標,同時 使用不同的 Tomcat 版本,我們需要在我們的 pom 文件中添加 dependencyManagement 部分的條目。 重要的是,我們必須將其放置在 spring-boot-dependencies 之前:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.44</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>4. 結論
在本教程中,我們學習了幾個常見的 Tomcat 嵌入式服務器配置。要查看更多可能的配置,請訪問官方 Spring Boot 應用屬性文檔 頁面。