第09章-Nacos配置管理
# 9.1 配置管理介绍
为什么要实现配置管理?
- 不同环境,不同配置
- 配置属性动态刷新
# 9.2 配置示例
nacos配置管理的配置文件是bootstrap.yml,其中也有server-addr配置,这是因为Spring Cloud Alibaba将服务发现和配置管理区分开了,nacos服务发现的集群和nacos配置管理的集群可以分离,这样职责单一,性能也更好。
加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2
3
4
写配置,resource目录下新建bootstrap.yml文件
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
application:
name: content-center
profiles:
active: dev
2
3
4
5
6
7
8
9
10
11
配置,nacos配置约定,对应的地方必须一样
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile。注意:当
spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
上图是通过控制台操作配置,也可以通过调用API操作配置。Spring Boot和Spring Cloud等使用示例,参考官网示例。配置历史版本回滚见控制台对应页面即可。
参考:
# 9.3 应用配置共享
# 9.3.1 同一服务不同环境共享:
上小节中,如果nacos控制台不配置 spring.profiles.active
,表示这是应用在所有环境下的通用配置,例如dev
和prod
都可以读取到该配置,但是指定环境的配置优先于通用环境配置。
# 9.3.2 不同服务共享
有些配置在所有服务中都是一样的,例如数据库连接以及一些业务配置等。有两种配置方式
方式1、shared-dataids
spring.cloud.nacos.config:
#共享配置的DataId,多个使用,分隔
#越靠后,优先级越高;common2.yml > common1.yaml
#.yaml后缀不能少,只支持 yaml/properties
shared-dataids: common1.yamL,common2.yamL
#哪些共享配置支持动态刷新,多个使用,分隔
refreshable-dataids: common1.yaml
server-addr: 127.0.0.1:8848
file-extension: yaml
2
3
4
5
6
7
8
9
方式二、ext-config
spring.cloud.nacos.config:
server-addr: 127.0.0.1:8848
file-extension: yaml
ext-config:
#需共享的DataId,yaml后缀不能少,只支持yaml/properties
#越靠后,优先级越高优先级common2.yaml > common1.yaml
- data-id: common1.yaml
#common1.yaml所在的group
group: DEFAULT_GROUP
#是否允许刷新,默认false
refresh: true
- data-id: common2.yaml
group: DEFAULT_GROUP
refresh: true
2
3
4
5
6
7
8
9
10
11
12
13
14
# 9.3.3 配置方式优先级
现在已经有3种配置方式了
- nacos根据${prefix}、${spring.profiles.active}和${file-extension} 自动获取配置
- ext-config
- shared-dataids
三种方式的优先级如下:
自动配置 > ext-config > shared-dataids
# 9.4 引导上下文
# 9.4.1 引导上下文介绍
- 引导上下文用于连接配置服务器,读取外部配置
- 引导上下文是Application Context的父上下文
引导上下文的一个比较特殊的上下文,它用来==连接配置服务器,读取外部配置==,bootstrap.yml就是引导上下文的配置文件。对于我们的应用,他就是用于连接nacos,读取nacos里面的配置。
Application Context 和之前的 Ribbon、Feign也都是父子上下文关系
# 9.4.2 配置项优先级
当项目又有远程配置,又有本地配置,远程配置优先于本地配置
如果想让本地配置覆盖远程配置,可以根据以下方式配置。需要注意的是,这段配置要放在有远程配置中。
spring:
cloud:
config:
#是否允许本地配置覆盖远程配置
allow-override: true
#是否一切以本地配置为准,默认false
override-none: false
#系统环境变量或系统属性才能覆盖远程配置文件的配置
#本地配置文件中配置优先级低于远程配置,默认true
override-system-properties: true
2
3
4
5
6
7
8
9
10
# 9.5 Nacos数据持久化
# 9.5.1 Nacos的各种数据
Nacos不同用途的数据存储在不同的目录,Nacos提供两种不同服务时的数据路径如下:
- 服务发现组件
- 数据存储在:~/nacos/naming
- 配置服务器
- 配置数据:$NACOS_HOME/data/derby-data
- 快照等:~/nacos/config
Nacos的上述三种数据都是持久化存储的,其中配置服务器快照是用于提升性能和容灾的,配置数据是存储在Nacos内嵌的Apache下的数据库derby,配置数据存储在这里是不能用于生产环境的,内嵌的小型数据库高可用是个问题
可以使用derby客户端连接Nacos内嵌的derby数据库(IDEA就支持连接),路径在 $NACOS_HOME/data/derby-data,用户名密码都是 nacos
# 9.5.2 搭建生产可用的Nacos集群
要搭建生产可用的Nacos集群,要实现Nacos集群本身的高可用,以及数据库的高可用。
参考: