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. 1.nacos控制台创建common.yml文件
    除了一个以:application为名称的yml文件外,我们再创建一个common.yml文件

  2. 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

毕业于<br>相信技术可以改变人与人之间的生活<br>码农一枚