title: SpringCloudAlibaba-7-nacos配置文件共享规则
date: 2020-01-30 13:19:26
tags:
SpringCloudAlibaba
nacos配置文件共享
1.为什么需要配置文件共享?
比如我们定义了一个application.yml文件,其他微服务全部依赖于此配置文件。比如:feign的一些参数、超时、可能所有微服务配置的时间都是一样的,但是每个微服务都有一个个性化的配置。因此需要一个通用的和个性化的配置文件。在微服务nacos里面的额客户端里面需要同时加载,那么nacos也对这种情况进行了支持-shared-dataIds。
2.实现同时加载2个配置文件
1.nacos控制台创建common.yml文件
除了一个以:application为名称的yml文件外,我们再创建一个common.yml文件
2.在配置文件中添加如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| spring: application: name: nacos-config-client-load cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yml namespace: 83aa3869-684c-43af-919a-74bcceea120b shared-dataids: common.yml server: port: 8056 ``` 重启服务: Loading nacos data, dataId: 'common.yml', group: 'DEFAULT_GROUP' Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client-load.yml'}, NacosPropertySource {name='common.yml'}]} 以上具备data id 所以我们进行测试: 测试:http://127.0.0.1:8056/test/config 返回结果: common-DEFAULT_GROUP.yml 以上是我们没有应用配置文件:${application}.yml,现在我们在NS租户下创建nacos-config-client-load.yml ![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/49.png) 再次请求:http://127.0.0.1:8056/test/config 返回结果: NS-nacos-config-client-load.yml #### 3.配置group 上面所有情况都是我们没有配置group参数进行的一些验证,现在我们配置group 1. 1.bootstrap.yml配置
|
spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
shared-dataids: common.yml
group: alibaba
server:
port: 8056
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 2. 2.nacos控制台配置 nacos控制台新增group为alibaba的common.yml ![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/50.png) 我们测试:http://127.0.0.1:8056/test/config 返回: common-DEFAULT_GROUP.yml 这个其实是SpringCloudAlibaba的一个问题: 对于共享文件,他只传递了租户(namespace),并没有把我们的配置group传递过去 #### 4.公共配置文件刷新 当我们修改common.yml文件里面的test属性值时候,我们在浏览器测试 访问时候,其test对应的值是没有刷新的,此时我们需要添加共享文件的另一个属性值:refreshable-dataids: common.yml #### 5.ext-config 上面共享文件读取传递属性值时候,只是传递了namespace属性值,没有传递group属性值,那么有没有另外的解决方案呢?(注意: ext-config是一个list)
|
spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
group: alibaba
#shared-dataids: common.yml
#refreshable-dataids: common.yml
ext-config:
- data-id: common.yml
group: alibaba
refresh: true
server:
port: 8056
1 2 3 4 5 6 7 8 9 10 11 12
| 重启服务后: Loading nacos data, dataId: 'common.yml', group: 'alibaba' Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client-load.yml'}, NacosPropertySource {name='common.yml'}]} 测试后返回:alibaba-NS-common.yml #### 6.ext-config与其他配置共存 nacos控制台配置的文件为: ![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/51.png) bootstrap.yml配置文件为:
|
spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
group: alibaba
ext-config:
- data-id: common.yml
group: alibaba
refresh: true
shared-dataids: common.yml
server:
port: 8056
```
重启后日志:
Loading nacos data, dataId: ‘common.yml’, group: ‘DEFAULT_GROUP’
Loading nacos data, dataId: ‘common.yml’, group: ‘alibaba’
由于后加载的配置文件会覆盖前面加载的配置文件;所以我们测试访问时候,返回结果为:
alibaba-NS-common.yml