前言:Nacos 是什么?
Nacos(Naming and Configuration Service)是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。我们可以使用它:
✅作为注册中心(服务发现)
✅作为配置中心(集中化配置管理)
本篇重点讲 Nacos 作为配置中心 的使用。
一、什么是 Nacos 配置中心?🧠
Nacos(Dynamic Naming and Configuration Service) 是阿里开源的服务注册与配置管理中心。
作为配置中心,Nacos 提供了:✅ 配置中心的核心作用:
传统配置文件(本地) Nacos(集中式配置) 配置分散、手动部署 配置集中、统一管理 修改后需重启服务 支持热更新 无法区分环境/服务 支持命名空间 、分组 不利于运维、灰度 更适合动态配置、灰度发布 ✅ 使用 Nacos 的优势:
📦 集中管理:所有微服务的配置集中托管在 Nacos 中。
🔄 动态刷新:配置修改后可动态生效,无需重启服务。
🌍 环境隔离:通过命名空间划分 dev/test/prod 等环境。
🧩 扩展灵活:支持配置共享、多文件加载、灰度发布等。
二、Nacos 配置中心使用流程 🚀
以下以 Spring Boot + Spring Cloud Alibaba 项目为例,详细介绍从依赖引入到动态刷新配置。
三、Nacos 配置使用详解 🛠️
1️⃣ 引入依赖(Maven)
XML<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>0.2.2.RELEASE</version> <!-- 请根据 Spring Cloud 版本选择 --> </dependency>若你同时使用注册中心:
XML<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>0.2.2.RELEASE</version> <!-- 请根据 Spring Cloud 版本选择 --> </dependency>
2️⃣ 编写
bootstrap.yml(必须)🚨 必须用
bootstrap.yml,因为 Spring 会在加载application.yml之前读取它,才能初始化 Nacos 配置。
XMLspring: application: //spring.application.name 是应用名,spring.cloud.nacos.config.name 是配置文件的前缀。 //Nacos 默认会用 application.name 来当 config.name,除非你手动写了config.name name: nacos-config-demo # 会作为 dataId 的前缀 profiles: active: dev # 表示读取 nacos-config-demo-dev.yaml cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yaml # 支持 yaml/properties namespace: public # 或使用 UUID(非默认空间) group: DEFAULT_GROUP refresh-enabled: true✅ 最终读取的配置文件 dataId 是:
nacos-config-demo-dev.yaml
3️⃣ Nacos 控制台添加配置 ✍️
Data ID:
nacos-config-demo-dev.yamlGroup:
DEFAULT_GROUP配置格式:
YAML配置内容示例:
XMLuser: name: Alice age: 30
4️⃣ 编写配置绑定类(推荐方式)
java@Configuration @ConfigurationProperties(prefix = "user") // 自动绑定配置 public class UserConfig { private String name; private Integer age; // Getter & Setter }⚙️ 开启配置绑定支持(可省略)
java@SpringBootApplication @EnableConfigurationProperties public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } }
5️⃣ 控制器中使用配置 + 动态刷新
若希望修改配置后立即生效,需添加
@RefreshScope注解。@RefreshScope 背后做了啥
java@RestController @RefreshScope public class UserController { @Autowired private UserConfig userConfig; @GetMapping("/user") public String getUser() { return userConfig.getName() + " - " + userConfig.getAge(); } }四、拓展配置项(多个配置文件)
javaspring: cloud: nacos: config: extension-configs: - data-id: db-config.yaml group: DEFAULT_GROUP refresh: true - data-id: common.yaml group: DEFAULT_GROUP refresh: true
默认主配置是:
nacos-config-demo-dev.yaml可以引入多个扩展配置
支持刷新(
refresh: true)
五、命名空间的使用(多环境隔离)
可在 Nacos 控制台创建多个 namespace 来区分环境:
环境 Namespace ID 说明 开发环境 dev-id开发使用 测试环境 test-id测试使用 生产环境 prod-id正式使用 配置方式:
javaspring: cloud: nacos: config: namespace: dev-id
六、配置优先级(从高到低)
nacos-config-demo-dev.yaml(主配置)
extension-configs中的多个配置
shared-configs(共享配置,可用于多个服务通用)
七、常见问题与排查 🔍
问题 可能原因 解决方式 配置读不到 文件名或 profile 错 确认 dataId 命名是否正确 无法动态刷新 缺少 @RefreshScope加在 Controller 或 Config 类上 只使用 @Value 失败 @Value 不支持批量刷新 用 @ConfigurationProperties不生效 写在 application.yml 中了 必须写在 bootstrap.yml
八、项目结构示例 🧱
csssrc ├── main │ ├── java │ │ └── com.example.demo │ │ ├── config/UserConfig.java │ │ └── controller/UserController.java │ └── resources │ ├── bootstrap.yml ✅ 必须 │ └── application.yml
九、结语 🧩
Nacos 配置中心是微服务配置管理的利器:
初学阶段建议:单环境单配置文件 先跑通再拓展
熟悉后可用:多命名空间 + 多配置文件 + 动态刷新 + 加密配置
分布式微服务--Nacos作为配置中心(二)
你我约定有三2025-08-03 22:32
相关推荐
CodeCraft Studio6 分钟前
【金融行业案例】基于Vaadin全栈Java框架重构内部系统,全面提升开发效率与用户体验潇I洒13 分钟前
Linux写sh开机启动脚本-bash报错的两种解决方法R.lin35 分钟前
使用注解将日志存入Elasticsearch方才coding40 分钟前
25年11月系分架构论文:论安全架构设计青鱼入云1 小时前
介绍Spring Cloud Gateway戮戮1 小时前
一次深入排查:Spring Cloud Gateway TCP 连接复用导致 K8s 负载均衡失效滴滴滴嘟嘟嘟.1 小时前
全屏定时提醒工具せいしゅん青春之我1 小时前
【JavaEE初阶】网络原理——TCP处理先发后至问题hunzhizi1 小时前
2024-2025年技术发展趋势深度分析:AI、前端与后端开发的革新之路lypzcgf1 小时前
Coze套餐实现工作总结