Nacos配置管理-补充
# Nacos配置管理-补充
# 格式补充
使用nacos-server进行配置管理时,可以发现,数据支持不同的格式。
然而server设置了不同的格式,如果我们的SpringBoot(也就是nacos客户端)项目没进行对应配置的话,那应用就无法读取到对应数据。
SpringBoot(也就是nacos客户端)项目,它默认是properties的一个文件扩展名,但是你改了它(nacos-server)的格式,你就需要相应的进行配置了。通过一个叫做file extension来进行配置。
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
2
3
4
5
6
如此一来,nacos-server即使换成yaml格式,也能正常读取了。
# namespace
对于不同环境的项目,怎么实现不同配置文件对应不同环境呢?这里推荐通过namespace,也就是命名空间的方式,因为它可以被权限所控制。
当然,通过DataId也可以,但不建议。因为权限不好管理。
SpringBoot项目中,namespace的值,应该还有一点需要注意。
在Nacos配置中使用的namespace
字段应该填写的是命名空间的ID(通常是UUID格式),而不是命名空间的名称。即使你的命名空间名字叫dev
,你也需要填入对应的UUID形式的命名空间ID。
# 配置文件优先级
bootstrap.properties > bootstrap.yml > application.properties > application.yml
# 分类
以下为分类的一个建议:
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX医疗项目、XX电商项目
Datald:每个项目下往往有若干个工程(微服务),每个配置集(Datald)是一个工程(微服务)的主配置文件
# DataId相关
假如我们的服务名跟nacos-server中的data ID,这个值不一样的话,我们通常情况下是读取不到的。
关于它的一个命名规范在官网中有说明,
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档 (opens new window)。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
但,假如说我们还需要去读取一些个共享的一些公共的配置文件,那此时,nacos-server的data ID就跟服务名不一样了,对不对?因为它是共享变量,对应多个微服务。如何解决呢?
nacos组件提供了2种方式
- extension-configs
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: c9f18cb4-b445-4da4-b526-f52bf3298730
group: partA
extension-configs:
- data-id: sss-user-common
# refresh 默认是 false
refresh: true
# 默认值是 DEFAULT_GROUP
# group:
2
3
4
5
6
7
8
9
10
11
12
13
14
- shared-configs
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: c9f18cb4-b445-4da4-b526-f52bf3298730
group: partA
shared-configs[0]:
data-id: bb-fu-pass
2
3
4
5
6
7
8
9
它们2个都是数组,因此写法有2种,以上写法2种都适用
一个问题。因为它们都是数组形式,如果数组里面有多个相同的配置,那谁会生效呢?更详细一点就是,不同的shared-configs对应的配置,有多个key是相同的,但它们的value是不同,此时会选择谁的value呢?
它会以后读取到的为优先。也就是下标最大的才生效。
那再继续,如果跟自带的data id重现了重复的key,谁会生效呢?
答案是:自带的data id会生效。
继续优先级:
extension-configs > shared-configs
那这种优先级有什么用呢?
比如说,有些功能我虽然引用了公共的,但是我自己里面配置了还是用的我自己的。那么这个时候出现了这种情况,你知道怎么解了吧。
# 永久实例
修改 order-demo
中的配置,设置 ephemeral
为 fasle
,即注册为永久实例:
spring:
cloud:
nacos:
# 服务端用户名密码
username: nacos
password: nacos
# 服务发现
discovery:
# 命名空间
namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
# 服务端地址,默认:127.0.0.1:8848
server-addr: 127.0.0.1:8848
# 是否临时实例
ephemeral: fasle
2
3
4
5
6
7
8
9
10
11
12
13
14
15