1. 概述
Spring Boot 是一種帶有指導意見的框架。儘管如此,我們通常會在應用程序配置文件(例如 application.properties)中覆蓋自動配置的屬性。
然而,在 Spring Cloud 應用程序中,我們通常會使用另一個配置文件,稱為 bootstrap.properties。
在本快速教程中,我們將解釋 bootstrap.properties 和 application.properties 之間的 差異。
2. 應用配置文件的使用場景是什麼?
我們使用 <em >application.yml</em > 或 <em >application.properties</em >> 來配置應用程序上下文。
當 Spring Boot 應用程序啓動時,它會創建一個不需要顯式配置的應用程序上下文——它已經實現了自動配置。但是,Spring Boot 提供了不同的方法來覆蓋這些屬性。
我們可以通過代碼、命令行參數、<em >ServletConfig</em > 初始化參數、<em >ServletContext</em > 初始化參數、Java 系統屬性、操作系統變量和應用程序屬性文件來覆蓋這些屬性。
需要注意的是,這些應用程序屬性文件在覆蓋其他形式的應用程序上下文屬性時,優先級最低。
我們通常將可以覆蓋到應用程序上下文中的屬性分組:
- 核心屬性(日誌屬性、線程屬性)
- 集成屬性(RabbitMQ 屬性、ActiveMQ 屬性)
- Web 屬性(HTTP 屬性、MVC 屬性)
- 安全屬性(LDAP 屬性、OAuth2 屬性)
3. Bootstrap 配置文件何時使用?
我們使用 <em >bootstrap.yml</em> 或 <em >bootstrap.properties</em> 配置 bootstrap 上下文。 這樣我們就可以將 bootstrap 和主上下文的外部配置很好地分離開來。
bootstrap 上下文負責從外部源加載配置屬性,並對本地外部配置文件的屬性進行解密。
當 Spring Cloud 應用程序啓動時,它會創建一個 <em >bootstrap</em> 上下文。 記住的是,bootstrap 上下文是主應用程序的父上下文。
另一個需要記住的關鍵點是,這兩個上下文共享 <em >Environment</em>,這是任何 Spring 應用程序的外部屬性的來源。 與應用程序上下文不同,bootstrap 上下文使用不同的約定來定位外部配置。
配置文件的來源可以是文件系統,甚至可以是 Git 倉庫,例如。 服務使用 <em >spring-cloud-config-client</em> 依賴項來訪問配置服務器。
簡單來説,配置服務器是我們訪問應用程序上下文配置文件的入口點。
4. 快速示例
在示例中,bootstrap上下文配置文件的作用是配置 spring-cloud-config-client 依賴項以加載正確的應用程序屬性文件。
以下是一個 bootstrap.properties 文件的示例:
spring.application.name=config-client
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.username=root
spring.cloud.config.password=s3cr3t
spring.cloud.config.fail-fast=true
management.security.enabled=false5. 結論
與 Spring Boot 應用程序不同,Spring Cloud 應用程序具有作為其應用程序上下文父級的引導上下文。儘管它們都共享相同的 Environment,但它們在定位外部配置文件的約定不同。
引導上下文搜索 bootstrap.properties 或 bootstrap.yaml 文件,而應用程序上下文則搜索 application.properties 或 application.yaml 文件。
並且,引導上下文的配置屬性在應用程序上下文的配置屬性之前加載。