Nacos配置中心同一個(gè)命名空間下配置文件引用原理分析
加載過(guò)程:
Nacos 中的多個(gè)配置文件
在 Nacos 配置中心中,你可以在同一個(gè)命名空間下管理多個(gè)配置文件。
這些配置文件是獨(dú)立的,在 Nacos 配置中心本身,它們無(wú)法直接互相引用或共享屬性。
Spring Boot 配置的加載
當(dāng)你的 Java 程序使用 Nacos 作為配置源時(shí),Spring Boot 會(huì)通過(guò) Nacos 客戶(hù)端加載指定的配置文件。
在加載過(guò)程中,如果某個(gè)配置文件(例如 gaea-overall.yml)中使用了占位符(例如 ${spring.redis.host}),Spring 會(huì)嘗試從已加載的配置文件中解析這些占位符的值。
具體來(lái)說(shuō):
- Nacos 配置文件加載: Spring Boot 會(huì)使用 Nacos 客戶(hù)端從 Nacos 配置中心加載你指定的配置文件。比如,你可能在
application.yml中配置了spring.cloud.nacos.config.file-extension=yml,并指定了要加載的 Nacos 配置文件。 - 占位符解析: 如果
overall.yml中有占位符(比如${spring.redis.host}),Spring Boot 會(huì)查找該占位符的值,并在當(dāng)前加載的配置文件中進(jìn)行解析。假如redis.yml文件已經(jīng)加載且包含spring.redis.host的配置,Spring 就會(huì)自動(dòng)解析并替換掉這個(gè)占位符。
Java 程序中的配置加載
當(dāng) Java 程序啟動(dòng)時(shí),它會(huì)加載 Nacos 配置 中指定的文件(比如 overall.yml),并將該配置文件中的內(nèi)容加載到 Spring 環(huán)境中。
如果該配置文件引用了其他配置文件中的屬性,Spring 會(huì)根據(jù)這些占位符去查找已經(jīng)加載的配置文件中的對(duì)應(yīng)屬性。
示例
假設(shè)你在 Nacos 中有以下兩個(gè)配置文件:
- 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}配置加載過(guò)程
- Java 程序啟動(dòng)時(shí),Spring Boot 會(huì)從 Nacos 中加載
overall.yml和redis.yml。 - 在加載
overall.yml時(shí),Spring 會(huì)遇到占位符${spring.redis.password}、${spring.redis.host}等。 - Spring 會(huì)查找這些屬性,并通過(guò) Nacos 客戶(hù)端從已經(jīng)加載的配置文件(如
redis.yml)中獲取相應(yīng)的值。 - Spring 將這些值填充到
overall.yml中的占位符位置,最終生成有效的配置,例如uri: redis://yourpassword@localhost:6379/0。
總結(jié)
- 在 Nacos 配置中心中,同一個(gè)命名空間的配置文件是不能直接互相引用的。但是,Spring Boot 在加載配置文件時(shí),可以加載多個(gè)配置文件,并且能夠解析占位符,通過(guò)占位符的方式引用其他配置文件中的屬性。
- 你可以通過(guò) Spring 的
spring.config.import、spring.cloud.nacos.config.file-extension等機(jī)制來(lái)加載多個(gè)配置文件,并且 Spring 會(huì)將這些文件合并到應(yīng)用程序的環(huán)境中,從而使得占位符能夠正確解析。
所以,雖然 Nacos 配置中心不支持跨文件引用,但是 Spring Boot 提供了靈活的配置加載和占位符解析機(jī)制,可以使你在多個(gè)配置文件之間共享屬性,進(jìn)而實(shí)現(xiàn)你描述的功能。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基礎(chǔ)之ArrayList的擴(kuò)容機(jī)制
這篇文章主要介紹了Java基礎(chǔ)之ArrayList的擴(kuò)容機(jī)制,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
EDI中JAVA通過(guò)FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例
這篇文章主要介紹了EDI中JAVA通過(guò)FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11
SpringBoot快速實(shí)現(xiàn)接口消息加密的過(guò)程詳解
在項(xiàng)目中,為了保證數(shù)據(jù)的安全,我們常常會(huì)對(duì)傳遞的數(shù)據(jù)進(jìn)行加密,常用的加密算法包括對(duì)稱(chēng)加密(AES)和非對(duì)稱(chēng)加密(RSA),博主選取碼云上最簡(jiǎn)單的API加密項(xiàng)目進(jìn)行下面的講解,需要的朋友可以參考下2023-11-11
Java調(diào)用HTTPS接口實(shí)現(xiàn)繞過(guò)SSL認(rèn)證
SSL認(rèn)證是確保通信安全的重要手段,有的時(shí)候?yàn)榱朔奖阏{(diào)用,我們會(huì)繞過(guò)SSL認(rèn)證,這篇文章主要介紹了Java如何調(diào)用HTTPS接口實(shí)現(xiàn)繞過(guò)SSL認(rèn)證,需要的可以參考下2023-11-11
SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理
這篇文章主要介紹了SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

