当前位置: 首页 > news >正文

分布式微服务--Nacos作为配置中心(二)

前言: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)

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>0.2.2.RELEASE</version> <!-- 请根据 Spring Cloud 版本选择 -->
</dependency>

若你同时使用注册中心:

<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 配置。

spring:application:name: nacos-config-demo  # 会作为 dataId 的前缀profiles:active: dev  # 表示读取 nacos-config-demo-dev.yamlcloud:nacos:config:server-addr: 127.0.0.1:8848file-extension: yaml  # 支持 yaml/propertiesnamespace: public  # 或使用 UUID(非默认空间)group: DEFAULT_GROUPrefresh-enabled: true

✅ 最终读取的配置文件 dataId 是:
nacos-config-demo-dev.yaml


3️⃣ Nacos 控制台添加配置 ✍️

进入 http://localhost:8848:

  • Data ID: nacos-config-demo-dev.yaml

  • Group: DEFAULT_GROUP

  • 配置格式: YAML

  • 配置内容示例:

user:name: Aliceage: 30

4️⃣ 编写配置绑定类(推荐方式)

@Configuration
@ConfigurationProperties(prefix = "user") // 自动绑定配置
public class UserConfig {private String name;private Integer age;// Getter & Setter
}
⚙️ 开启配置绑定支持(可省略)
@SpringBootApplication
@EnableConfigurationProperties
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}

5️⃣ 控制器中使用配置 + 动态刷新

若希望修改配置后立即生效,需添加 @RefreshScope 注解。

@RefreshScope 背后做了啥

@RestController
@RefreshScope
public class UserController {@Autowiredprivate UserConfig userConfig;@GetMapping("/user")public String getUser() {return userConfig.getName() + " - " + userConfig.getAge();}
}

四、拓展配置项(多个配置文件)

spring:cloud:nacos:config:extension-configs:- data-id: db-config.yamlgroup: DEFAULT_GROUPrefresh: true- data-id: common.yamlgroup: DEFAULT_GROUPrefresh: true
  • 默认主配置是:nacos-config-demo-dev.yaml

  • 可以引入多个扩展配置

  • 支持刷新(refresh: true


五、命名空间的使用(多环境隔离)

可在 Nacos 控制台创建多个 namespace 来区分环境:

环境Namespace ID说明
开发环境dev-id开发使用
测试环境test-id测试使用
生产环境prod-id正式使用

配置方式:

spring:cloud:nacos:config:namespace: dev-id

六、配置优先级(从高到低)

  1. nacos-config-demo-dev.yaml(主配置)

  2. extension-configs 中的多个配置

  3. shared-configs(共享配置,可用于多个服务通用)


七、常见问题与排查 🔍

问题可能原因解决方式
配置读不到文件名或 profile 错确认 dataId 命名是否正确
无法动态刷新缺少 @RefreshScope加在 Controller 或 Config 类上
只使用 @Value 失败@Value 不支持批量刷新@ConfigurationProperties
不生效写在 application.yml 中了必须写在 bootstrap.yml


八、项目结构示例 🧱

src
├── main
│   ├── java
│   │   └── com.example.demo
│   │       ├── config/UserConfig.java
│   │       └── controller/UserController.java
│   └── resources
│       ├── bootstrap.yml  ✅ 必须
│       └── application.yml

九、结语 🧩

Nacos 配置中心是微服务配置管理的利器:

  • 初学阶段建议:单环境单配置文件 先跑通再拓展

  • 熟悉后可用:多命名空间 + 多配置文件 + 动态刷新 + 加密配置

http://www.lryc.cn/news/607736.html

相关文章:

  • Text2SQL:如何通过自然语言直接获取数据,打破技术壁垒?
  • opencv自定义滤波
  • 入门MicroPython+ESP32:开启科技新旅程
  • 云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
  • Diffusion模型生产化指南:用LoRA技术快速定制企业专属AI画师
  • 电商API接口的优势、数据采集方法及功能说明
  • AIDL当Parcelable序列化的数据类通信时报“Class not found when unmarshalling“找不到该类时的解决方案
  • 存储成本深度优化:冷热分层与生命周期管理——从视频平台年省200万实践解析智能存储架构
  • Linux网络编程【UDP网络通信demon】
  • 编程与数学 03-002 计算机网络 19_网络新技术研究
  • 【DeepSeek-R1 】分词系统架构解析
  • fastGEO v1.7.0 大更新,支持PCA、差异分析、火山图、热图、差异箱线图、去批次等分析
  • 【05】VisionMaster入门到精通——圆查找
  • Spring Boot 全 YAML 配置 Liquibase 教程
  • 决策树算法:三大核心流程解析
  • 嵌入式系统的中断控制器(NVIC)
  • SpringCloud实战:机器人对战系统架构
  • 《软件测试与质量控制》实验报告二 单元测试
  • Terraria 服务端部署(Docker)
  • 【Java】不允许直接操作数据表中的数据,开发前台界面来实现对多个数据表的增删改查
  • 在 AKS 中运行 Azure DevOps 自托管代理-2
  • 【Office】Office2024最新版下载安装使用教程(附多版本安装包)
  • 【深度学习新浪潮】什么是专业科研智能体?
  • Flutter镜像替换
  • 大模型学习专栏-导航页
  • 第十四天:C++内存管理
  • 5-EP4CE10F17C8-引脚配置
  • 亚像素级精度的二维图像配准方法
  • Metamorph、LlamaFusion、MetaQuery论文解读
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年1月22日真题