springcloud的配置文件的讀取順序


SpringBoot默認支持properties和YAML兩種格式的配置文件。前者格式簡單,但是只支持鍵值對。如果需要表達列表,最好使用YAML格式。SpringBoot支持自動加載約定名稱的配置文件,例如application.yml。如果是自定義名稱的配置文件,就要另找方法了。可惜的是,不像前者有@PropertySource這樣方便的加載方式,后者的加載必須借助編碼邏輯來實現。

一、bootstrap.yml(bootstrap.properties)與application.yml(application.properties)執行順序

bootstrap.yml(bootstrap.properties)用來程序引導時執行,應用於更加早期配置信息讀取,如可以使用來配置application.yml中使用到參數等

application.yml(application.properties) 應用程序特有配置信息,可以用來配置后續各個模塊中需使用的公共參數等。

bootstrap.yml 先於 application.yml 加載

二、典型的應用場景如下:

當使用 Spring Cloud Config Server 的時候,你應該在 bootstrap.yml 里面指定 spring.application.name 和 spring.cloud.config.server.git.uri

和一些加密/解密的信息

技術上,bootstrap.yml 是被一個父級的 Spring ApplicationContext 加載的。這個父級的 Spring ApplicationContext是先加載的,在加載application.yml 的 ApplicationContext之前。

為何需要把 config server 的信息放在 bootstrap.yml 里?

當使用 Spring Cloud 的時候,配置信息一般是從 config server 加載的,為了取得配置信息(比如密碼等),你需要一些提早的或引導配置。

因此,把 config server 信息放在 bootstrap.yml,用來加載真正需要的配置信息。

 

git倉庫中配置文件的讀取順序:

有幾種http訪問的方式:

 

(1)首先根據application的名稱來尋找,即application的名字(比如,即項目的名稱abc).*來查找文件。

(2)如果沒有對應的名字,則讀取application.properties里面的內容,如果這個也沒有,則返回錯誤。

比如git倉庫中的master分支上面有兩個配置文件:foobar-dev.yml和application.yml。

這兩個文件中都有一個配置,名稱相同,但是內容不同,假設foobar-dev.yml中的是profile=abc-foobar,application.yml中的是profile=abc-application

我們訪問的時候比如:localhost:8080/master/foobar-dev.yml,則命中到foobar-dev.yml,讀取的是abc-foobar

如果訪問localhost:8080/master/foobar-default.yml,這個文件在git中是不存在的,則命中到application.yml中,讀取的是profile=abc-application

總結:這里有個 優先級,先找對應名稱的,如果沒有則找默認的application.yml的內容,如果再沒有,那就沒辦法了。

 

不同的模塊微服務模塊使用自己的配置,各自團隊自己管理自己的配置,不同的環境配置不用的配置文件如何實現:

一種環境一個倉庫

(1)通配符的方式(個人感覺這種方式比較好)

一個微服務對應一個git倉庫:微服務的名稱與git倉庫的名稱建立一個對應關系,這樣子可以采用通配符的方式

隔離性比較好,不影響團隊之間的工作。

一個環境一個文件,容易管理。

(2)模式匹配的方式(個人感覺比較麻煩)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM