Spring Cloud 系列之 Alibaba Nacos 配置中心
1|0Nacos 介绍
Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。英文全称 Dynamic Naming and Configuration Service,Na 为 Naming/NameServer 即注册中心,co 为 Configuration 即配置中心,Service 是指该注册/配置中心都是以服务为核心。服务(Service)是 Nacos 世界的一等公民。
官网是这样说的:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 可以更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。
使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。
Nacos 官网:https://nacos.io/zh-cn/
Github:https://github.com/alibaba/nacos
2|0Nacos 安装
2|1环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行 Nacos,还需要为此配置 Maven 环境,请确保是在以下版本环境中安装使用:
- JDK 1.8+;
- Maven 3.2.x+。
2|2下载源码或者安装包
可以通过源码和发行包两种方式来获取 Nacos。
源码方式
从 Github 上下载源码方式。
发行包方式
您可以从 https://github.com/alibaba/nacos/releases 下载最新稳定版本的 nacos-server
包。
2|3启动服务器
Linux/Unix/Mac
在 Nacos 的解压目录 nacos/bin
目录下启动。
启动命令(standalone 代表着单机模式运行,非集群模式):
如果您使用的是 ubuntu 系统,或者运行脚本报错提示符号找不到,可尝试如下运行:
Windows
启动命令:
或者双击 startup.cmd
运行文件。
2|4访问
访问:http://localhost:8848/nacos/ ,默认用户名/密码是 nacos/nacos。
2|5关闭服务器
Linux/Unix/Mac
Windows
或者双击 shutdown.cmd
运行文件。
3|0配置 MySQL 数据库
Nacos 在 0.7
版本之前,默认使用的是嵌入式数据库 Apache Derby
来存储数据(内嵌的数据库会随着 Nacos 一起启动,无需额外安装);0.7
版本及以后,增加了对 MySQL
数据源的支持。
3|1MySQL数据源
环境要求:MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
初始化 MySQL 数据库
创建数据库 nacos_config
。
SQL源文件地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,或者在 nacos-server
解压目录 conf
下,找到 nacos-mysql.sql
文件,运行该文件,结果如下:
application.properties 配置
修改 nacos/conf/application.properties
文件的以下内容。
最终修改结果如下:
如果你和我一样使用的是 MySQL 8.0+ 版本,那么启动 Nacos 时肯定会报错。莫慌,在 Nacos 安装目录下新建
plugins/mysql
文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar,重启 Nacos 即可,启动时会提示更换了 MySQL 的 driver-class 类。
4|0Nacos 配置入门
nacos-config-demo
聚合工程。SpringBoot 2.3.0.RELEASE
、Spring Cloud Hoxton.SR5
。
4|1发布配置
选择 配置管理
的 配置列表
页面,点击最右侧 +
按钮新建配置。
Nacos Config 使用 Data ID
和 Group
来确定配置。
下图显示 Data Id
为 product-service.yaml
,组使用默认组,并添加 yaml
格式的配置信息。
4|2获取配置
创建项目
我们创建聚合项目来讲解 Nacos,首先创建一个 pom 父工程。
添加依赖
pom.xml
商品服务 product-service
创建项目
在刚才的父工程下创建一个 product-service
项目。
添加依赖
主要添加 spring-cloud-starter-alibaba-nacos-config
依赖。
完整依赖如下:
配置文件
在 bootstrap.yml
中配置 Nacos Server 的地址和应用名。
说明:之所以需要配置
spring.application.name
,是因为它是构成 Nacos 配置管理dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profile.active
即为当前环境对应的 profile。注意:当spring.profile.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式将变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型,默认为properties
。
控制层
使用 Spring 的 @Value
注解来获取配置信息,${}
中对应 Nacos 配置中心配置内容的 key,:
后跟默认值。
并且通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新。
启动类
测试
访问:http://localhost:7070/config 结果如下:
修改配置为以下内容,重新发布:
控制台打印信息如下:
访问:http://localhost:7070/config 结果如下:
5|0Nacos 配置核心概念
5|1配置
为什么需要配置?概念。
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
5|2配置管理
对配置的多维度管理。
系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。
5|3配置项
一个键值对 Key = Value。
一个具体的可配置的参数与其值域(一个键值对),通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。
5|4配置集
多个键值对,一般指一个配置文件。
一组相关或者不相关的配置项的集合称为配置集(多个键值对/一个配置文件)。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
5|5配置集 ID
给这个配置文件起一个全局唯一的 ID。
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
5|6配置分组
多个配置文件放在一起,形成组,一般用于区分项目。例如,某学校多应用之间的区分,教师应用 TEACHER_GROUP,学生应用 STUDENT_GROUP。
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
5|7配置快照
缓存配置信息。
Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。
5|8命名空间
区分环境,比如:dev、test、prod 等等。
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
5|9最佳实践
通常我们可以这样定义 Namespace,Group,DataId:
Namespace
:代表不同的环境,如:开发、测试, 生产等;Group
:代表某个项目,如:XX物流项目,XX教育项目;DataId
:每个项目下往往有若干个应用,每个配置集(DataId)是一个应用的主配置文件
6|0Namespace 命名空间
前面已经介绍过命名空间的概念,用于隔离多个环境,而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们针对企业项目实际研发流程和环境进行规划。
如某软件公司拥有开发、测试、生产三套环境,那么我们应该建立三个 Namespace 进行区分。
6|1创建命名空间
点击左侧菜单 命名空间
,看到默认有一个 public(保留空间)
,点击右侧 新建命名空间
进行创建。
按下图的方式分别创建 dev(开发环境)
、test(测试环境)
、prod(生产环境)
三个命名空间。
最终结果如下:
6|2指定命名空间
如果 spring.cloud.nacos.config.namespace
中没有指定名称空间,则使用 Nacos 的 public(保留空间)。还可以按以下方式指定自定义名称空间:
此配置必须在 bootstrap.yml 文件中。 spring.cloud.nacos.config.namespace 的值是命名空间的 ID,可以从 Nacos 控制台中检索 ID 的值。 添加配置时,请勿选择其他名称空间。 否则,将无法正确检索配置。
6|3发布配置
选择 配置管理
的 配置列表
页面,选择 dev
环境,点击最右侧 +
按钮新建配置。
Nacos Config 使用 Data ID
和 Group
来确定配置。
下图显示 Data Id
为 product-service.yaml
,组使用默认组,并添加 yaml
格式的配置信息。
6|4获取配置
配置文件
bootstrap.yml
控制层
使用 Spring 的 @Value
注解来获取配置信息,${}
中对应 Nacos 配置中心配置内容的 key,:
后跟默认值。
并且通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新。
测试
访问:http://localhost:7070/config 结果如下:
7|0Group 组
Group 组信息可以在新建配置时进行指定,如下图:
8|0配置管理
这一小节我们通过大量配图演示控制台的相关操作。
8|1新建/编辑/删除/查询
右侧 +
新建配置。单条编辑或删除选择操作栏中的编辑或删除。批量删除勾选以后选择左下角红色删除。
可以通过 Data Id
和 Group
查询配置,还可以将查询结果导出。
8|2导入/导出/克隆
前文提到命名空间用于隔离多个环境,每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。也就是说可能大量的配置项都是相同的,个别差异的配置项需要额外修改,在这种情况下,如果一条条重新添加肯定非常不友好,我们可以通过导入导出功能实现。
比如,我们将 dev
环境下的配置先全选导出。
然后在 test
环境中导入,文件上传后将直接导入配置,请务必谨慎操作!
通过克隆也可以达到相同的效果,不同的是克隆可以额外修改 Data Id
和 Group
信息。
8|3历史/回滚
选择 配置管理
的 历史版本
页面,通过 Data Id
和 Group
查询历史,可以查看每个历史版本的详情,或选择回滚至该版本。
8|4监听查询
Nacos 提供配置订阅者,也就是监听者查询能力,同时提供客户端当前配置的 MD5 校验值,以便帮助用户更好的检查配置变更以后是否推送到 Client 端。
选择 配置管理
的 监听查询
页面,通过 配置或IP
、Data Id
和 Group
查询。
9|0权限控制
Nacos 提供了基于 RBAC 的权限控制,通过左侧 权限控制
菜单的 用户列表
、角色管理
、权限管理
实现,可以算是傻瓜式操作了,鼠标多点几下就会了。
10|0公共配置
每个配置集对应一个应用,但是开发时我们可能会有一些公共配置被多个应用使用,这时候就需要扩展配置集或共享配置集来实现了。
10|1扩展配置集
我们先创建三个配置集,如下:
获取配置
配置文件
bootstrap.yml
总结:
- 通过配置
spring.cloud.nacos.config.ext-config[n].data-id
来支持多个配置集。 - 通过配置
spring.cloud.nacos.config.ext-config[n].group
来定制配置组。如果未指定,则使用默认组。 - 通过配置
spring.cloud.nacos.config. config[n].refresh
来控制该配置集是否支持配置的动态刷新。默认情况下不支持。
控制层
使用 Spring 的 @Value
注解来获取配置信息,${}
中对应 Nacos 配置中心配置内容的 key,:
后跟默认值。
并且通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新。
测试
访问:http://localhost:7070/extConfig 结果如下:
10|2共享配置集
通过共享配置集的方式也可以实现公共配置的功能,唯一的区别就是共享配置集无法设置组信息,只获取 DEFAULT_GROUP。具体实现方式如下:
访问:http://localhost:7070/extConfig 结果如下:
11|0配置优先级
Spring Cloud Alibaba Nacos Config 提供了三种从 Nacos 拉取配置的功能:
- A:通过内部相关规则(应用名、配置内容的数据格式等)自动生成相关的 Data Id 配置;
- B:通过配置
spring.cloud.nacos.config.ext-config[n].data-id
来支持多个配置集。同时配置多个配置集时,优先级关系根据n
的值决定,值越大,优先级越高; - C:通过配置
spring.cloud.nacos.config.shared-dataids
配置多个共享配置集;
当三种方式同时使用时,优先级关系为:A > B > C。
12|0Nacos 集群环境搭建
集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图:
如果为了方便省事,可以使用直连 ip 模式,配置中按如下编写即可:
PS:如果只是为了学习的话直接在本地启动 3 个实例,通过修改端口的方式即可。本文使用三台服务器的方式带大家搭建环境,其实这种方式反而更简单。
12|1环境准备
Nacos 单节点,也就是我们刚才使用的 standalone
模式,默认使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况,0.7 版本以后增加了支持 MySQL 数据源能力。集群搭建的时候我们需要将 Nacos 对接 Mysql 进行数据存储。如果要搭建高可用的集群环境,至少要满足以下条件:
- JDK 1.8+;
- Maven 3.2.x+;
- MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
- 3个或3个以上Nacos节点才能构成集群。
12|2下载源码或者安装包
可以通过源码和发行包两种方式来获取 Nacos。
源码方式
从 Github 上下载源码方式。
发行包方式
您可以从 https://github.com/alibaba/nacos/releases 下载最新稳定版本的 nacos-server
包。
12|3配置集群配置文件
将安装包解压。
在 Nacos 的解压目录 nacos/conf
目录下,复制配置文件 cluster.conf.example
并重命名为 cluster.conf
,每行配置成 ip:port
。(请配置3个或3个以上节点)
12|4配置 MySQL 数据库
Nacos 在 0.7
版本之前,默认使用的是嵌入式数据库 Apache Derby
来存储数据(内嵌的数据库会随着 Nacos 一起启动,无需额外安装);0.7
版本及以后,增加了对 MySQL
数据源的支持。
12|5MySQL数据源
环境要求:MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
初始化 MySQL 数据库
创建数据库 nacos_config
。
SQL源文件地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,或者在 nacos-server
解压目录 conf
下,找到 nacos-mysql.sql
文件,运行该文件,结果如下:
application.properties 配置
修改 nacos/conf/application.properties
文件的以下内容。
最终修改结果如下:
如果你和我一样使用的是 MySQL 8.0+ 版本,那么启动 Nacos 时肯定会报错。莫慌,在 Nacos 安装目录下新建
plugins/mysql
文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar,重启 Nacos 即可,启动时会提示更换了 MySQL 的 driver-class 类。
12|6启动服务器
Linux/Unix/Mac
在 Nacos 的解压目录 nacos/bin
目录下启动。
启动命令(在没有参数模式,是集群模式):
12|7查看启动记录
可通过 /nacos/logs/nacos.log
(详细日志)或 /nacos/conf/start.out
(启动记录)的输出内容查看是否启动成功。
查看命令:
启动成功输出结果:
12|8访问
访问以下链接,默认用户名/密码是 nacos/nacos :
- http://192.168.10.101:8848/nacos/
- http://192.168.10.102:8848/nacos/
- http://192.168.10.103:8848/nacos/
从下图可以看到集群节点共有三个,其中 192.168.10.101:8848
为 leader
。
12|9关闭服务器
Linux/Unix/Mac
12|10测试
直连 ip 模式
发布配置
选择 配置管理
的 配置列表
页面,点击最右侧 +
按钮新建配置。
获取配置
bootstrap.yml
使用之前的控制层代码,访问:http://localhost:7070/config 结果如下:
Nginx 转发
再启动一台服务器 192.168.10.100
,安装 Nginx,配置代理转发规则。
获取配置
bootstrap.yml
使用之前的控制层代码,访问:http://localhost:7070/config 结果如下:
至此 Nacos 配置中心所有的知识点就讲解结束了。
本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议
。
大家可以通过 分类
查看更多关于 Spring Cloud
的文章。
🤗 您的点赞
和转发
是对我最大的支持。
📢 扫码关注 哈喽沃德先生
「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~
__EOF__

本文链接:https://www.cnblogs.com/mrhelloworld/p/nacos-config.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
https://mrhelloworld.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix