一、前言
分析完SpringBoot启动加载Nacos配置的流程,我们注意到它会优先使用LocalConfigInfoProcessor.getFailover()
加载Nacos的本地配置文件,文件路径如下:
user.home
/nacos/config/serverName
_nacos/data/config-data-tenant/tenant
/group
/dataId
其中serverName的构成如下:
fixed-IP
_Port
-namespaceId
_nacos
上述文件路径构成中,类似user.home
的都是变量;tenant为nameSpaceId。
二、验证
1、LocalConfigInfoProcessor类
开始验证之前,我们先了解一下LocalConfigInfoProcessor
类的几个关键方法:
1、getFailover()
方法首先会通过getFailoverFile()
获取本地配置文件,然后通过readFile()
读取文件内容;
2、getSnapshot()
方法首先通过getSnapshotFile()
获取远程配置的snapshot文件,然后通过readFile读取;
3、saveSnapshot()
方法会存储从Nacos服务端获取到的新的config;
4、cleanAllSnapshot
方法会清除snapshot目录
下所有缓存文件。
2、验证正文
LocalConfigInfoProcessor.saveSnapshot
保存的Nacos远端配置快照数据路径在我本机的文件路径如下:
其中:
1)/Users/zhouxin是user.home
;
2)fixed-127.0.0.1_8848-2c38da96-f654-4105-bbc0-63befaa449f0_nacos是serverName
;
3)2c38da96-f654-4105-bbc0-63befaa449f0是namespaceId
;
4)DEFAULT_GROUP是group
;
5)ls的结果(config1.yaml config2.yaml config3.yaml config5.yaml)是dataId
集合;
开始搞事情!
在/Users/zhouxin/nacos/config/fixed-127.0.0.1_8848-2c38da96-f654-4105-bbc0-63befaa449f0_nacos/
目录下创建如下文件目录:
/data/config-data-tenant/2c38da96-f654-4105-bbc0-63befaa449f0/DEFAULT_GROUP
并新建一个config1.yaml文件,内容如下:
student:
name: saint-local-config-data-tenant
Nacos远端相同nameSpace、Group下的config1.yaml,内容为:
student:
name: saint--name
spring:
cloud:
config:
# 本地配置允许覆盖远程配置
override-none: true
allow-override: false
override-system-properties: false
启动SpringBoot项目,我们可以看到他在本地目录找到了config1.yaml文件:
1)结论
1、/data/config-data-tenant/2c38da96-f654-4105-bbc0-63befaa449f0/DEFAULT_GROUP
目录下的config1.yaml文件覆盖了Nacos服务端的config1.yaml文件;
2、Nacos服务端的config1.yaml中所有配置全部失效。因为/data/config-data-tenant/2c38da96-f654-4105-bbc0-63befaa449f0/DEFAULT_GROUP
目录下的config1.yaml文件是全量覆盖。
2)再做个实验
/data/config-data-tenant/2c38da96-f654-4105-bbc0-63befaa449f0/DEFAULT_GROUP
这个目录下会不会自动生成一些文件,比如我第一次访问Nacos服务端配置之后。
进入到/Users/zhouxin/nacos/config/fixed-127.0.0.1_8848-2c38da96-f654-4105-bbc0-63befaa449f0_nacos
目录,先把我们手动添加的文件目录全部删除;
接着运行SpringBoot项目再ls看一下/Users/zhouxin/nacos/config/fixed-127.0.0.1_8848-2c38da96-f654-4105-bbc0-63befaa449f0_nacos
目录;
嘿,它不会自动添加./data一系列目录文件。
最后,我们一起思考下这个机制的作用是什么?欢迎评论留言