Spring Boot 默認(rèn)支持 properties(.properties) 和 YAML(.yml .yaml ) 兩種格式的配置文件励七,yml 和 properties 文件都屬于配置文件泥技,功能一樣训措。
Spring Cloud 構(gòu)建于 Spring Boot 之上黄痪,在 Spring Boot 中有兩種上下文圾旨,一種是 bootstrap妙黍,另外一種是 application稚铣,下面列舉這兩種配置文件的區(qū)別
加載順序
若application.yml 和bootstrap.yml 在同一目錄下:bootstrap.yml 先加載 application.yml后加載
bootstrap.yml 用于應(yīng)用程序上下文的引導(dǎo)階段。bootstrap.yml 由父Spring ApplicationContext加載铡羡。
配置區(qū)別
bootstrap.yml 和 application.yml 都可以用來配置參數(shù)积蔚。
bootstrap.yml 用來程序引導(dǎo)時執(zhí)行,應(yīng)用于更加早期配置信息讀取烦周【”可以理解成系統(tǒng)級別的一些參數(shù)配置,這些參數(shù)一般是不會變動的读慎。一旦bootStrap.yml 被加載漱贱,則內(nèi)容不會被覆蓋。
application.yml 可以用來定義應(yīng)用級別的夭委, 應(yīng)用程序特有配置信息幅狮,可以用來配置后續(xù)各個模塊中需使用的公共參數(shù)等。
屬性覆蓋問題
啟動上下文時株灸,Spring Cloud 會創(chuàng)建一個 Bootstrap Context崇摄,作為 Spring 應(yīng)用的 Application Context 的父上下文。
初始化的時候慌烧,Bootstrap Context 負(fù)責(zé)從外部源加載配置屬性并解析配置逐抑。這兩個上下文共享一個從外部獲取的 Environment。Bootstrap 屬性有高優(yōu)先級屹蚊,默認(rèn)情況下厕氨,它們不會被本地配置覆蓋。
也就是說如果加載的 application.yml 的內(nèi)容標(biāo)簽與 bootstrap 的標(biāo)簽一致汹粤,application 也不會覆蓋 bootstrap命斧,而 application.yml 里面的內(nèi)容可以動態(tài)替換。
bootstrap.yml典型的應(yīng)用場景
- 當(dāng)使用 Spring Cloud Config Server 配置中心時玄括,這時需要在 bootstrap.yml 配置文件中指定 spring.application.name 和 spring.cloud.config.server.git.uri冯丙,添加連接到配置中心的配置屬性來加載外部配置中心的配置信息
- 一些固定的不能被覆蓋的屬性
- 一些加密/解密的場景