目录

  • 1、为什么要使用配置中心
  • 2、主流配置中心对比
  • 3、Nacos 配置中心领域模型
  • 4、配置中心使用
  • 4.1 控制台创建配置
  • 4.2 项目使用
  • 4.2.1 引入依赖
  • 4.2.2 服务端加载配置信息
  • 4.3 多环境切换
  • 4.3.1 环境切换
  • 5、配置动态刷新
  • 6、共享配置
  • 6.1 新建共享配置
  • 6.2 服务个性配置
  • 6.3 加载共享配置
  • 7、配置文件的版本管理

1、为什么要使用配置中心

每个微服务都是一个独立的工程,都有一个配置文件,随着项目微服务数量的增加,就产生了一些项目配置上的问题:

  1. 配置文件太分散,不便于管理
  2. 配置冗余,通用配置不能共享
  3. 修改配置需要重启服务,不支持配置的动态刷新

因此引出了统一管理配置的需求,使用配置中心组件管理配置数据,实现通用配置共享,修改配置动态刷新。

nacos配置中心redis配置不生效 nacos 配置中心_配置文件

2、主流配置中心对比

nacos配置中心redis配置不生效 nacos 配置中心_nacos配置中心redis配置不生效_02

3、Nacos 配置中心领域模型

三元组(namespace、group、dataId)唯一确定一个配置

nacos配置中心redis配置不生效 nacos 配置中心_nacos配置中心redis配置不生效_03

4、配置中心使用

Nacos 配置中心与注册中心是同一个服务,控制台上 配置管理 菜单就是配置中心相关

4.1 控制台创建配置

第一步:创建配置

nacos配置中心redis配置不生效 nacos 配置中心_配置文件_04

第二步:填写配置信息

nacos配置中心redis配置不生效 nacos 配置中心_加载_05

dateId 规则,详细见官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

nacos配置中心redis配置不生效 nacos 配置中心_spring_06

第三步:发布

nacos配置中心redis配置不生效 nacos 配置中心_加载_07

4.2 项目使用

4.2.1 引入依赖

<!-- 配置中心依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

4.2.2 服务端加载配置信息

配置项目中如何找到 nacos 中的配置信息。

新建文件 bootstrap.properties,当项目启动时会加载这个文件。
项目中可以不用application.properties文件了

# 从配置中心加载配置文件
# 这里配置了 namespace和group
# 具体文件名(dataId)是通过公式拼接的 ${prefix}-${spring.profiles.active}.${file-extension}
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.namespace=qa
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.prefix=nacos-demo-config
spring.cloud.nacos.config.file-extension=properties

spring.profiles.active=qa

直接启动,启动成功可以在控制台看到成功加载项目相关配置

4.3 多环境切换

新建一个生产环境配置
nacos-demo-config-pro.properties

# 服务端口
server.port=8000
server.servlet.context-path=/nacos-demo-config
# 服务名称 必须有 保证唯一性
spring.application.name=nacos-demo-config
# nacos server 的地址
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# 服务发布到指定的namespace,不指定默认就是public
spring.cloud.nacos.discovery.namespace=pro
# 服务发布到指定的group,默认值是DEFAULT_GROUP
spring.cloud.nacos.discovery.group=my-group

4.3.1 环境切换

修改bootstrap.properties配置文件,修改 namespace 和 active 为环境 id

nacos配置中心redis配置不生效 nacos 配置中心_nacos配置中心redis配置不生效_08

这种方法不太灵活,每次打包前还得修改配置文件,可以使用添加虚拟机参数的方式,不用修改配置文件。

-Dspring.cloud.nacos.config.namespace=pro -Dspring.profiles.active=pro

nacos配置中心redis配置不生效 nacos 配置中心_spring_09

配置太长了,两个参数值是一致的,可以用自定义变量简化

nacos配置中心redis配置不生效 nacos 配置中心_nacos配置中心redis配置不生效_10

nacos配置中心redis配置不生效 nacos 配置中心_nacos配置中心redis配置不生效_11

5、配置动态刷新

nacos-demo-config-pro.properties 配置中随便添加一个配置项

dynamic.config=123123

使用 @Value 读取配置

// 冒号后面是默认值
@Value("${dynamic.config:aaa}")
private String dynamicConfig;

这个时候只是成功读取了配置项数据,但是还不能动态刷新数据,在 nacos 控制台上修改数据后,应用中并不是最新数据。

需要添加注解@RefreshScope 才能自动刷新配置

nacos配置中心redis配置不生效 nacos 配置中心_spring_12

6、共享配置

6.1 新建共享配置

文件名:common.properties,文件名没有特殊要求

# nacos server 的地址
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# 服务发布到指定的namespace,不指定默认就是public
spring.cloud.nacos.discovery.namespace=pro
# 服务发布到指定的group,默认值是DEFAULT_GROUP
spring.cloud.nacos.discovery.group=my-group

# 数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/training?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.max-active=60

nacos配置中心redis配置不生效 nacos 配置中心_spring_13

6.2 服务个性配置

删减其他配置里的公共配置项,只保留服务独有的配置

nacos配置中心redis配置不生效 nacos 配置中心_spring_14

6.3 加载共享配置

bootstrap.properties 添加配置项

# 加载共享配置
spring.cloud.nacos.config.shared-configs=common.properties

小问题:默认不支持共享配置的动态刷新,需要添加配置

# 添加配置支持自动刷新通用配置 
spring.cloud.nacos.config.refreshable-dataids=common.properties

7、配置文件的版本管理

Nacos 自带了历史版本的功能

nacos配置中心redis配置不生效 nacos 配置中心_spring_15

nacos配置中心redis配置不生效 nacos 配置中心_nacos配置中心redis配置不生效_16