springcloud的讀取配置文件的優先級?

今天被問到springcloud的讀取配置文件的優先級,起初我以爲讀取配置文件的優先級是根據項目的配置環境,然後巴拉巴拉說了一大堆,結果發現我理解錯了,

其實就是指的是在項目的配置文件優先級,查了下資料,總結了下

首先要明白:springcloud的加載配置文件的機制和springboot應用加載配置文件有所差別,如它引用了bootstrap.properties的配置文件,同時也支持配置中心加載配置文件,這裏主要簡述下配置文件加載的優先級及覆蓋關係的控制上,

1.bootstrap上下文

springboot啓動的時候會去創建一個bootstrap上下文,他是引用父級上下文

(請注意這裏所說的bootstrap指的是是啓動最開始時加載的配置項,與bootstrap.yml或者說bootstrap.properties是兩碼事,這點很容易混淆)

它負責從一些外部環境中加載配置項,如配置中心;這部分配置項的優先級是最高的,因此它不會被其它的配置文件中加載的配置項給覆蓋。

bootstrap的上下文使用另外一種機制來加載額外的配置文件,相對於從application.properties(或者yml)中加載配置文件中加載配置項,你也可以選擇從bootstrap.properties(yml)中加載,以區分boostrap上下文中加載的配置項和主上下文加載的配置項。

可以在系統配置項或者啓動命令參數中指定不使用bootstrap機制加載配置項:

spring.cloud.bootstrap.enabled=false

2.配置加載位置

springcloud應用加載項可以來自以下幾個位置

1.啓動命令中指定位置
2.操作系統配置項
3.環境變量
4.配置中心的配置文件
5.本地的application.properties(yml)
6.本地boostrap.properties(yml)

這幾個位置的配置項從上往下優先級遞減,即從上面位置加載的配置項會覆蓋下面位置加載的配置項。如application.properties中加載的配置項優先級要高於bootstrap.properties中加載的配置項

3.配置項的覆蓋配置

默認情況下,從Spring Cloud Config中加載的配置項,是不能被本地的配置項覆蓋的,如果想要覆蓋這些配置項,需要在配置中心的配置文件中(或者系統配置項、命令行配置項中等)添加以下配置項(注意本地配置文件中增加該配置無任何意義)

spring.cloud.config.allowOverride=true

參考:https://www.cnblogs.com/Mr-Rocker/p/10690304.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章