Nacos配置中心同一個命名空間下配置文件引用原理分析
加載過程:
Nacos 中的多個配置文件
在 Nacos 配置中心中,你可以在同一個命名空間下管理多個配置文件。
這些配置文件是獨立的,在 Nacos 配置中心本身,它們無法直接互相引用或共享屬性。
Spring Boot 配置的加載
當你的 Java 程序使用 Nacos 作為配置源時,Spring Boot 會通過 Nacos 客戶端加載指定的配置文件。
在加載過程中,如果某個配置文件(例如 gaea-overall.yml)中使用了占位符(例如 ${spring.redis.host}),Spring 會嘗試從已加載的配置文件中解析這些占位符的值。
具體來說:
- Nacos 配置文件加載: Spring Boot 會使用 Nacos 客戶端從 Nacos 配置中心加載你指定的配置文件。比如,你可能在
application.yml中配置了spring.cloud.nacos.config.file-extension=yml,并指定了要加載的 Nacos 配置文件。 - 占位符解析: 如果
overall.yml中有占位符(比如${spring.redis.host}),Spring Boot 會查找該占位符的值,并在當前加載的配置文件中進行解析。假如redis.yml文件已經(jīng)加載且包含spring.redis.host的配置,Spring 就會自動解析并替換掉這個占位符。
Java 程序中的配置加載
當 Java 程序啟動時,它會加載 Nacos 配置 中指定的文件(比如 overall.yml),并將該配置文件中的內(nèi)容加載到 Spring 環(huán)境中。
如果該配置文件引用了其他配置文件中的屬性,Spring 會根據(jù)這些占位符去查找已經(jīng)加載的配置文件中的對應屬性。
示例
假設(shè)你在 Nacos 中有以下兩個配置文件:
- redis.yml
spring:
redis:
host: localhost
port: 6379
password: yourpassword
database: 0- overall.yml
uri: redis://${spring.redis.password}@${spring.redis.host}:${spring.redis.port}/${spring.redis.database}配置加載過程
- Java 程序啟動時,Spring Boot 會從 Nacos 中加載
overall.yml和redis.yml。 - 在加載
overall.yml時,Spring 會遇到占位符${spring.redis.password}、${spring.redis.host}等。 - Spring 會查找這些屬性,并通過 Nacos 客戶端從已經(jīng)加載的配置文件(如
redis.yml)中獲取相應的值。 - Spring 將這些值填充到
overall.yml中的占位符位置,最終生成有效的配置,例如uri: redis://yourpassword@localhost:6379/0。
總結(jié)
- 在 Nacos 配置中心中,同一個命名空間的配置文件是不能直接互相引用的。但是,Spring Boot 在加載配置文件時,可以加載多個配置文件,并且能夠解析占位符,通過占位符的方式引用其他配置文件中的屬性。
- 你可以通過 Spring 的
spring.config.import、spring.cloud.nacos.config.file-extension等機制來加載多個配置文件,并且 Spring 會將這些文件合并到應用程序的環(huán)境中,從而使得占位符能夠正確解析。
所以,雖然 Nacos 配置中心不支持跨文件引用,但是 Spring Boot 提供了靈活的配置加載和占位符解析機制,可以使你在多個配置文件之間共享屬性,進而實現(xiàn)你描述的功能。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用spring aop 統(tǒng)一捕獲異常和寫日志的示例demo
本文通過一個小demo給大家介紹spring AOP 實現(xiàn)的異常捕獲和日志的方法技巧,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-08-08
IDEA @SpringBootApplication報錯原因及解決
這篇文章主要介紹了IDEA @SpringBootApplication報錯原因及解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Java實現(xiàn)圖片轉(zhuǎn)換PDF文件的示例代碼
這篇文章主要介紹了Java實現(xiàn)圖片轉(zhuǎn)換PDF文件的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
java serialVersionUID解決序列化類版本不一致問題面試精講
這篇文章主要為大家介紹了serialVersionUID解決序列化類版本不一致問題的面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
Java多線程--讓主線程等待所有子線程執(zhí)行完畢在執(zhí)行
Java主線程等待所有子線程執(zhí)行完畢在執(zhí)行,其實在我們的工作中經(jīng)常的用到,本篇文章就介紹了Java多線程--讓主線程等待所有子線程執(zhí)行完畢在執(zhí)行,有需要的可以了解一下。2016-11-11
Springboot web項目打包實現(xiàn)過程解析
這篇文章主要介紹了Springboot web項目打包實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
SpringBoot請求參數(shù)傳遞與接收說明小結(jié)
這篇文章主要介紹了SpringBoot請求參數(shù)傳遞與接收,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12

