當前位置:編程學習大全網 - 源碼下載 - 2021-11-22 spring-cloud-nacos配置優先級

2021-11-22 spring-cloud-nacos配置優先級

最近有項目組同學問到為什麽自己配置了nacos,但配置不生效?我簡單看了下,發現問題出在相關配置的優先級模式不同。

spring-boot項目,有bootstrap、application兩個配置文件,結合profile,和支持的文件格式properties、yaml,已經有6個配置文件了。然後使用了spring-cloud-starter-alibaba-nacos-config 後,又提供了三級配置。這些配置之間的組合關系,將在無形中影響配置的效果。很多同學只知道其中的壹種,因此在無意識引入兩種或以上的配置後,就會發現有奇怪的配置不生效問題發生。

spring-boot項目依賴bootstrap.yml 用於應用程序上下文的引導階段,由父Spring ApplicationContext加載,其工作的階段為父ApplicationContext 被加載到使用application.yml的之前。也就是說 bootstrap 加載優先於 applicaton。

bootstrap 主要用於從額外的資源來加載配置信息,還可以在本地外部配置文件中解密屬性。這兩個上下文***用壹個環境,它是任何Spring應用程序的外部屬性的來源。bootstrap 裏面的屬性會優先加載,它們默認也不能被本地相同配置覆蓋。

bootstrap 配置文件有以下幾個應用場景:

由於spring-boot支持多種文件格式,所以多種格式之間,其優先級是平等的,只要找到了壹個,就會被使用。壹般有:.properties、.yaml、.xml等格式。

應用級別的spring-boot配置文件,主要用於 Spring Boot 項目的自動化配置,其加載優先級低於bootstrap.yaml。

nacos作為外部配置服務器,通過spring-boot的bootstrap.yaml引入。但nacos本身,也提供了三級配置體系:主配置(只有壹個,但會按照不同後綴名,去找到相關配置)、擴展配置、***享配置。

三級配置的優先級如下:主配置 > 擴展配置 > ***享配置

nacos提供的配置路徑 spring.cloud.nacos.config 下,有壹系列的屬性用於定位主配置。基於 prefix(默認為 ${spring.application.name} 的值)、namespace、group(默認為字符串 DEFAULT_GROUP )、file-extension(默認為字符串 .properties ),按組裝規則 ${prefix}-${spring.profiles.active}.${file-extension} 去找到壹個配置。

在nacos的所有配置中,主配置(存在的情況下)具有最高的優先級,其同名配置值不能被擴展配置或***享配置中定義的同名屬性所覆蓋。

上述兩類配置都支持三個屬性: data-id 、 group (默認為字符串 DEFAULT_GROUP )、 refresh (默認為 true )。

實際上,nacos中並未對 extension-configs 和 shared-configs 的差別進行詳細闡述。我們從他們的結構,看不出本質差別;除了優先級不同以外,也沒有其他差別。那麽,nacos項目組為什麽要引入兩個類似的配置呢?我們可以從當初 該功能的需求(issue) 上找到其原始目的。

摘要其核心內容如下:

  • 上一篇:身體是否肥胖取決於身體的各項指標,出現哪些指標異常時,提醒應該減肥了呢?
  • 下一篇:如何編寫壹個利用Socket通信的程序?
  • copyright 2024編程學習大全網