當前位置:編程學習大全網 - 源碼下載 - springboot 2.4.13 無法從nacos獲取配置,但是可以註冊到nacos

springboot 2.4.13 無法從nacos獲取配置,但是可以註冊到nacos

springboot 2.4.13,集成了nacos,啟動後,nacos註冊中心有服務,但是,發現,配置沒有生效。於是,開啟了壹段源碼查找的過程。

首先,是pom引入的nacos配置

然後,application.yml添加nacos配置

啟動後,發現註冊中心有服務,但是,服務的配置不是從nacos配置中心獲取的,而是本地的。

查找壹下nacos源碼,找到nacos配置自動註入那塊兒:

然後發現,是這個NacosPropertySourceLocator實現的配置導入的

查詢源碼,可以發現,相關的配置,是通過這個方法,加載的,這個方法是總入口。

於是,嘗試加斷點,查看配置信息,看看為什麽沒有導入配置。然而,程序根本就沒有進入這個方法裏面!!!

根據接口實現,可以發現NacosPropertySourceLocator 是PropertySourceLocator的實現類,這個方法的調用執行,不是nacos自己去做的,而是通過spring去做的。

spring cloud 通過BootstrapApplicationListener,以監聽器的方式,通過監聽springboot啟動過程中的事件,通過onApplicationEvent方法處理事件,導入spring cloud相關配置。

通過加斷點,可以發現,這裏的方法bootstrapEnabled()返回值是false,直接就不執行後續的加載了。

因此,需要保證bootstrapEnabled返回值是true。

查看PropertyUtils源碼,可以發現,需要配置項 spring.cloud.bootstrap.enabled=true 並且存在 org.springframework.cloud.bootstrap.marker.Marker 類的時候,spring cloud 才會去加載spring cloud的配置。

因此,pom中需要添加marker所在的組件依賴:

此時,需要在 bootstrap.yml 中添加spring cloud配置:

(至於為什麽是bootstrap.yml而不是application.yml,這又是另壹個問題了)

有了上面的配置,程序啟動後,就能正常的從nacos配置中心獲取配置了。

  • 上一篇:什麽是加密貨幣?加密貨幣都是做什麽用的?
  • 下一篇:創建壹個哈夫曼樹並且進行編碼權重如下w={5,29,7 8,14,13 ,3 ,11}寫出c語言代碼
  • copyright 2024編程學習大全網