首先,是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配置中心獲取配置了。