Spring Boot 默認支持 properties(.properties) 和 YAML(.yml .yaml ) 兩種格式的配置文件,yml 和 properties 文件都屬於配置文件,功能一樣。
Spring Cloud 構建於 Spring Boot 之上,在 Spring Boot 中有兩種上下文,一種是 bootstrap,另外一種是 application,下面列舉這兩種配置文件的區別
加載順序
若application.yml 和bootstrap.yml 在同一目錄下:bootstrap.yml 先加載 application.yml后加載
bootstrap.yml 用於應用程序上下文的引導階段;bootstrap.yml 由父Spring ApplicationContext加載。
配置區別
bootstrap.yml 和 application.yml 都可以用來配置參數。
bootstrap.yml 用來程序引導時執行,應用於更加早期配置信息讀取。可以理解成系統級別的一些參數配置,這些參數一般是不會變動的。一旦bootstrap.yml 被加載,則內容不會被覆蓋。
application.yml 可以用來定義應用級別的, 應用程序特有配置信息,可以用來配置后續各個模塊中需使用的公共參數等。
屬性覆蓋問題
啟動上下文時,Spring Cloud 會創建一個 Bootstrap Context,作為 Spring 應用的 Application Context 的父上下文。
初始化的時候,Bootstrap Context 負責從外部源加載配置屬性並解析配置。這兩個上下文共享一個從外部獲取的 Environment。Bootstrap 屬性有高優先級,默認情況下,它們不會被本地配置覆蓋。
也就是說如果加載的 application.yml 的內容標簽與 bootstrap 的標簽一致,application 也不會覆蓋 bootstrap,而 application.yml 里面的內容可以動態替換。
bootstrap.yml典型的應用場景
當使用 Spring Cloud Config Server 配置中心時,這時需要在 bootstrap.yml 指定 spring.applicatio配置文件中n.name 和 spring.cloud.config.server.git.uri,添加連接到配置中心的配置屬性來加載外部配置中心的配置信息
一些固定的不能被覆蓋的屬性
一些加密/解密的場景