首先是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只有在配置項spring . cloud . bootstrap . enabled = true且org . spring framework . cloud . bootstrap . marker . marker的類存在的情況下,才會加載spring cloud的配置。
因此,需要在pom中添加marker的組件依賴:
此時,您需要在bootstrap.yml中添加spring cloud配置:
(至於為什麽是bootstrap.yml而不是application.yml,這是另壹個問題了。)
通過以上配置,程序啟動後,可以正常從nacos配置中心獲取配置。