如何用 Nacos/Apollo 做分布式配置中心,实现多环境配置的动态刷新
```yaml app:id: multi-env-demo# 必须和 Apollo 里的应用 ID 一致 apollo:meta: http://localhost:8080# Apollo 服务端地址bootstrap:enabled: true# 开启 Apollo 引导namespaces: application.yml# 配置命名空间active: dev# 激活的环境 ```
上一期咱们聊了 SpringBoot 本地多环境配置,但在微服务场景下,本地配置文件的问题就暴露了:
-
几十上百个服务,改个配置要逐个改文件、重启服务,效率低到离谱;
-
生产环境配置散落在各个服务里,版本不一致、管理混乱;
-
想改个日志级别、调个连接池参数,必须重启服务,影响线上可用性。
这时候就需要分布式配置中心——把所有服务的配置集中管理,支持多环境、一键切换、动态刷新(改配置不用重启服务)。今天就手把手教你用两款主流配置中心:Nacos(阿里开源,轻量易上手)和 Apollo(携程开源,功能更全),从环境搭建到集成 SpringBoot,一步到位。
先搞懂核心逻辑:分布式配置中心解决啥问题?
不管是 Nacos 还是 Apollo,核心价值就 3 点:
- 配置集中管理
:所有服务的配置都存在配置中心,不用散落在各个服务里;
- 多环境统一管控
:dev/test/prod 配置在配置中心一键切换,不用改本地文件;
- 配置动态刷新
:改完配置后,服务自动感知并生效,无需重启。
先明确今天的实战目标:
-
搭建 Nacos/Apollo 配置中心环境;
-
SpringBoot 项目集成配置中心,读取多环境配置;
-
改配置中心的配置,SpringBoot 服务不重启就能生效。
Nacos 配置中心
Nacos 是阿里开源的微服务组件,既做配置中心也做注册中心,轻量、易部署,新手半小时就能搭起来。
第一步:搭建 Nacos 服务端
- 下载 Nacos
:
去 Nacos 官网(https://nacos.io/zh-cn/docs/quick-start.html)下载稳定版(比如 2.3.2),解压到本地。 - 启动 Nacos
:
-
Windows:双击
bin/startup.cmd; -
Linux/Mac:执行
sh bin/startup.sh -m standalone(单机模式,不用配集群)。
- 访问控制台
:
打开浏览器输入http://localhost:8848/nacos,默认账号密码都是nacos/nacos,登录后就能看到配置中心界面。 -
第二步:在 Nacos 里配置多环境配置
- 创建命名空间(隔离多环境)
:
左侧「命名空间」→ 「新建命名空间」:
-
开发环境:命名空间 ID 填
dev,名称填「开发环境」; -
测试环境:命名空间 ID 填
test,名称填「测试环境」; -
生产环境:命名空间 ID 填
prod,名称填「生产环境」。
⚠️ 命名空间是 Nacos 隔离环境的核心,不同环境的配置放在不同命名空间里。
- 创建命名空间(隔离多环境)
- 添加配置集(对应 SpringBoot 配置)
:
切换到「开发环境」命名空间 → 「配置管理」→「配置列表」→「新建配置」:```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://192.168.1.100:3306/dev_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: dev_root password: dev_123456 logging: level: root: DEBUG ``` 同理,在test/prod命名空间里分别添加相同 Data ID 的配置,只改对应环境的参数。 -
-
Data ID:
multi-env-demo.yml(必须和 SpringBoot 应用名+后缀一致); -
配置格式:YAML;
-
配置内容(和本地 dev 配置一致):
第三步:SpringBoot 集成 Nacos 配置中心
- 加依赖
(pom.xml):```xml com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2023.0.1.0```
- 创建 bootstrap.yml
:
SpringBoot 启动时,会先加载bootstrap.yml(优先级高于 application.yml),用来连接 Nacos 配置中心:```yaml spring: application: name: multi-env-demo # 必须和 Nacos 里的 Data ID 前缀一致 cloud: nacos: config: server-addr: localhost:8848 # Nacos 服务端地址 file-extension: yml # 配置文件格式 namespace: dev # 激活的环境(dev/test/prod) ``` - 删除本地的 application.yml 环境配置
:
所有配置都从 Nacos 读取,本地只留 bootstrap.yml 即可。
第四步:实现配置动态刷新
想让配置改了之后自动生效,只需要在读取配置的类上加
@RefreshScope注解:1importorg.springframework.beans.factory.annotation.Value; 2importorg.springframework.cloud.context.config.annotation.RefreshScope; 3importorg.springframework.web.bind.annotation.GetMapping; 4importorg.springframework.web.bind.annotation.RestController; 5 6@RestController 7@RefreshScope// 关键注解:开启配置动态刷新 8publicclassConfigController{ 9 10// 读取 Nacos 里的 server.port 配置 11@Value("${server.port}") 12privateString port; 13 14// 读取 Nacos 里的数据库用户名配置 15@Value("${spring.datasource.username}") 16privateString dbUsername; 17 18@GetMapping("/config") 19publicStringgetConfig(){ 20return"当前端口:"+ port +",数据库用户名:"+ dbUsername; 21} 22}测试:
-
启动 SpringBoot 服务,访问
http://localhost:8080/config,返回 dev 环境的配置; -
去 Nacos 控制台修改 dev 命名空间里的
server.port为 8081; -
不用重启服务,再次访问
/config,端口已经变成 8081(配置动态生效)。
Apollo 配置中心
Apollo 是携程开源的配置中心,功能比 Nacos 更丰富(权限管控、配置发布审核、灰度发布),适合中大型团队,缺点是部署稍复杂。
第一步:搭建 Apollo 服务端(快速启动)
Apollo 官方提供了一键启动脚本(适合开发测试),直接执行:
1# 克隆 Apollo 快速启动仓库 2git clone https://github.com/apolloconfig/apollo-build-scripts.git 3cd apollo-build-scripts 4# 一键启动 Apollo(会自动启动 MySQL 和 Apollo 服务) 5sh startup.sh启动后访问
http://localhost:8070,默认账号apollo/admin,登录后进入控制台。第二步:在 Apollo 里配置多环境配置
- 创建项目
:
「创建项目」→ 填写项目信息(应用 ID 填multi-env-demo)→ 选择「多环境部署」(默认 dev/test/prod)。 - 配置多环境参数
:
进入项目 → 切换到「dev 环境」→「配置管理」→「新增配置」:
-
Key:
server.port,Value:8080; -
Key:
spring.datasource.username,Value:dev_root;
批量添加完后「发布配置」,同理配置 test/prod 环境。
第三步:SpringBoot 集成 Apollo 配置中心
- 加依赖
(pom.xml):```xml com.ctrip.framework.apolloapollo-client2.0.0```
- 配置 application.yml
:```yaml app: id: multi-env-demo # 必须和 Apollo 里的应用 ID 一致 apollo: meta: http://localhost:8080 # Apollo 服务端地址 bootstrap: enabled: true # 开启 Apollo 引导 namespaces: application.yml # 配置命名空间 active: dev # 激活的环境 ```
- 动态刷新配置
:
Apollo 自带配置动态刷新,无需加额外注解,修改 Apollo 里的配置并发布后,1秒内就能在 SpringBoot 服务里生效。
Nacos vs Apollo 怎么选?
维度
Nacos
Apollo
部署难度
低(单机一键启动)
中(需依赖 MySQL,配置稍多)
核心功能
配置中心 + 注册中心(二合一)
纯配置中心(功能更细)
动态刷新
需加 @RefreshScope 注解
自动刷新,无需注解
权限管控
基础权限
细粒度权限(角色/审批流)
适用场景
中小团队、微服务快速落地
中大型团队、生产环境高要求场景
必避的 5 个坑
- Nacos 没建命名空间,配置混乱
:
把所有环境的配置都放默认命名空间,导致环境隔离失效;
解决:严格按 dev/test/prod 创建命名空间,不同环境用不同命名空间。 - SpringBoot 没加载 bootstrap.yml
:
Nacos 配置读不到,因为 SpringBoot 2.4+ 后默认关闭了 bootstrap 加载;
解决:加依赖spring-cloud-starter-bootstrap,或在 application.yml 里开启。 - Apollo 环境名写错
:
把apollo.active=prod写成apollo.active=production,导致配置读不到;
解决:Apollo 环境名固定为 dev/test/prod,别自定义。 - 动态刷新没生效
:
Nacos 集成后改配置不生效,因为没加@RefreshScope;
解决:在读取配置的 Controller/Service 上加该注解。 - 生产环境配置中心地址泄露
:
把 Nacos/Apollo 生产地址写在代码里;
解决:通过环境变量传递配置中心地址,比如APOLLO_META=http://prod-apollo:8080。
分布式配置中心是微服务的“标配”,不管选 Nacos 还是 Apollo,核心都是解决「配置集中管理 + 动态刷新 + 多环境隔离」的问题:
-
中小团队/快速落地:选 Nacos,二合一(配置+注册),部署简单;
-
中大型团队/生产高要求:选 Apollo,权限、审核、灰度发布更完善。
下一期,咱们会讲:配置中心的高级玩法——配置加密(数据库密码等敏感配置加密存储)、配置发布审计、灰度发布,进一步保障生产环境配置安全。
如果这篇文章帮你搞定了分布式配置中心,麻烦点个赞、在看,关注我,后续还有更多微服务实战技巧,从入门到精通~
-
更多推荐



所有评论(0)