# 配置中心 Nacos

# 1. 配置中心 Nacos

项目使用 Nacos 作为配置中心,实现配置的动态管理。

# 1.1 搭建 Nacos Server

① 参考《fastjava Nacos 极简入门》 (opens new window)文章的「2. 单机部署(最简模式)」或「3. 单机部署(基于 MySQL 数据库)」小节。

② 点击 Nacos 控制台的 [命名空间] 菜单,创建一个 ID 和名字都为 dev 的命名空间,稍后会使用到。如下图所示: 注意!新建命名空间时,它的“命名空间ID”、“命名空间名”都要是dev噢!!!

# 1.2 项目接入 Nacos

友情提示:以 xcmd-module-system 服务为例子。

# 1.2.1 引入依赖

xcmd-module-system-biz模块的 pom.xml (opens new window) 中,引入 Nacos 对应的依赖。如下所示:

<!-- Config 配置中心相关 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
1
2
3
4
5

# 1.2.2 添加配置

① 在 application-local.yaml (opens new window) 中,添加 nacos.config配置。如下所示:

--- #################### 配置中心相关配置 ####################

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # Nacos 服务器地址
      username: # Nacos 账号
      password: # Nacos 密码
      config: # 【注册中心】配置项
        namespace: dev # 命名空间。这里使用 dev 开发环境
        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
1
2
3
4
5
6
7
8
9
10
11

spring.cloud.nacos.config.namespace 配置项:设置为 dev,就是刚创建的命名空间
② 在 application.yaml (opens new window) 中,添加 spring.cloud.config.import 配置项。

spring:
  cloud:
    config:
      - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置
      - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置
1
2
3
4
5

其中 optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml表示,从 Nacos 加载dataIdsystem-server-local.yaml的配置项。

# 1.2.3 配置管理

友情提示:
如果你不会使用 Nacos 配置中心,可以参考 《fastjava Spring Cloud Alibaba 配置中心 Nacos 入门 》 文档,学习 Nacos 配置中心的使用。

按照需要,将不同环境存在差异的 application-local.yaml (opens new window)application-dev.yaml (opens new window) 中的配置,迁移到 Nacos 配置中心。以 application-local.yaml为例子。

① 将application-local.yaml中,除了如下 Nacos 配置外的配置,迁移到 Nacos 配置中心中。如下图所示:

--- #################### 注册中心 + 配置中心相关配置 ####################

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # Nacos 服务器地址
      username: # Nacos 账号
      password: # Nacos 密码
      discovery: # 【配置中心】配置项
        namespace: dev # 命名空间。这里使用 dev 开发环境
        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
        metadata:
          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
      config: # 【注册中心】配置项
        namespace: dev # 命名空间。这里使用 dev 开发环境
        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

= = 如果把这部分 Nacos 配置也放进去,都不知道 Nacos 地址信息了!!!

  • Data ID${spring.application.name}-${spring.profiles.active}.yaml,例如说 system-server-local.yaml。
  • 配置格式:YAML 格式
  • 配置内容:将 application-local.yaml中的配置,迁移到 Nacos 配置中心中。
提示:

① 疑问:为什么项目中的application-{env}.yaml中的配置,没有放到 Nacos 配置中心中?

回答:主要考虑大家快速启动可以更简单。

实际项目中,是建议放到 Nacos 配置中心,进行配置的动态管理的。

② 疑问:是否建议将 application.yaml 中的配置,迁移到 Nacos 配置中心中?

回答:一般情况下,不建议将 application.yaml中的配置,迁移到 Nacos 配置中心。因为application.yaml 中的配置,是通用的配置,无需动态管理。

所以目前在大厂里的最佳实践:

固定配置,放在 application.yaml配置文件
动态配置,按需放在 Nacos 等配置中心
敏感配置,放在 KMS 密钥服务,类似阿里云的 密钥管理服务 (opens new window)
③ 推荐文章:

《fastjava-cloud 将配置文件迁移至 nacos》 (opens new window)

# 2. 配置管理

友情提示:该功能是从 Boot 项目延用到 Cloud 项目,一般情况下不会使用到,使用 Nacos 管理配置即可。
在 [基础设施 -> 配置管理] 菜单,可以查看和管理配置,适合业务上需要动态的管理某个配置。

例如说:创建用户时,需要配置用户的默认密码,这个密码是不会变的,但是有时候需要修改这个默认密码,这个时候就可以通过配置管理来修改。

对应的后端代码是 xcmd-module-infraconfig (opens new window)业务模块。

# 2.1 配置的表结构

infra_config的表结构如下:

CREATE TABLE `infra_config` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键',
    `group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数分组',
    `type` tinyint NOT NULL COMMENT '参数类型',
    `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数名称',
    `key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键名',
    `value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键值',
    `sensitive` bit(1) NOT NULL COMMENT '是否敏感',
    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='参数配置表';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

key 字段,对应到 Spring Boot 配置文件的配置项,例如说 yudao.captcha.enablesys.user.init-password等等。

# 2.2 后端案例

调用 ConfigApi 的 #getConfigValueByKey(String key)方法,可以读取指定key 的参数值。

具体案例,可见 AdminUserServiceImpl 的 #importUserList(...)方法,在导入 Excel 用户时,它会读取 system.user.init-password作为用户初始化密码。

# 2.3 前端案例

后端提供了/admin-api/infra/config/get-value-by-key (opens new window)RESTful API 接口,返回指定配置项的值。前端的使用示例如下图:

更新时间: 6/11/2025, 7:01:06 PM