一、前言
分析完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一系列目录文件。
最后,我们一起思考下这个机制的作用是什么?欢迎评论留言