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

Spring Cloud Alibaba基础教程:使用Nacos作为配置中心


🧩 配置分级模型(Namespace / Group / DataID)

层级定位命名建议目的
Namespace环境维度dev/test/prod⚠️ 强隔离,物理级数据分片(不同库表前缀),杜绝跨环境污染
Group业务维度user-service/order-service同一微服务所有配置归属统一组,便于批量管理与权限控制
DataID功能维度application.yml/redis.yml/mq.yml按配置语义拆分,支持独立发布、灰度、回滚与审计

📝准备工作

  • 🌐 Nacos:Nacos配置中心
  • 🔧 f-alibaba-nacos-config-client-single: 单一配置
  • 🔀 f-alibaba-nacos-config-client-profile: 多环境-简单配置
  • 👥 f-alibaba-nacos-config-client-group: 多环境-配置组
  • 🌌 f-alibaba-nacos-config-client-namespace: 多环境-命名空间配置
  • 🔗 f-alibaba-nacos-config-client-multiple: 多重配置
startup.cmd-mstandalone#单机startup.cmd-mcluster#集群

🚀创建配置指南

1️⃣进入Nacos控制页面

  • 访问Nacos的管理页面:http://127.0.0.1:8848/nacos/

2️⃣进入“命名空间”页面

2️⃣进入“新建配置”页面


🌍 Public命名空间


📁alibaba-nacos-config-client-single.properties

  • 🆔Data ID:alibaba-nacos-config-client-single.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-single

📁alibaba-nacos-config-client-profile-test.properties

  • 🆔Data ID:alibaba-nacos-config-client-profile-test.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-profile-test

📁alibaba-nacos-config-client-profile-dev.properties

  • 🆔Data ID:alibaba-nacos-config-client-profile-dev.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-profile-dev

📁alibaba-nacos-config-client-profile-prod.properties

  • 🆔Data ID:alibaba-nacos-config-client-profile-prod.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-profile-prod

📁alibaba-nacos-config-client-group.properties(TEST_GROUP version)

  • 🆔Data ID:alibaba-nacos-config-client-group.properties
  • 🎴Group: 使用TEST_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-group-test

📁alibaba-nacos-config-client-group.properties(DEV_GROUP version)

  • 🆔Data ID:alibaba-nacos-config-client-group.properties
  • 🎴Group: 使用DEV_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-group-dev

📁alibaba-nacos-config-client-group.properties(PROD_GROUP version)

  • 🆔Data ID:alibaba-nacos-config-client-group.properties
  • 🎴Group: 使用PROD_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-group-prod

📁alibaba-nacos-config-client-namespace.properties

  • 🆔Data ID:alibaba-nacos-config-client-namespace.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-namespace

📁actuator.properties

  • 🆔Data ID:actuator.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title.actuator=helloworld-actuator

📁log.properties

  • 🆔Data ID:log.properties
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title.log=helloworld-log

🔬 Test命名空间

📁alibaba-nacos-config-client-namespace.properties

  • 🆔Data ID:alibaba-nacos-config-client-namespace.properties
  • 🎯命名空间ID:5e2c56a3-d024-472a-82be-b44400d5089b
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-namespace-test


💼 Dev命名空间

📁alibaba-nacos-config-client-namespace.properties

  • 🆔Data ID:alibaba-nacos-config-client-namespace.properties
  • 🎯命名空间ID:da13cf29-21c5-448d-a11d-d20f89fd0b97
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-namespace-dev


🌌 Prod命名空间

📁alibaba-nacos-config-client-namespace.properties

  • 🆔Data ID:alibaba-nacos-config-client-namespace.properties
  • 🎯命名空间ID:fb4e0e7b-f3d5-4b1b-8d62-042242cecb63
  • 🎴Group: 默认为DEFAULT_GROUP
  • 📜配置格式: 选择Properties
  • ✏️配置内容:
    my.title=helloworld-namespace-prod


🌍 单个环境管理


👀alibaba-nacos-config-client-single


1️⃣ 添加依赖

<!-- 继承的父POM --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><!-- repository中查找父POM --><relativePath/></parent><!-- 项目的属性设置 --><properties><!-- 项目构建使用的编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 项目报告使用的编码 --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- Java版本 --><java.version>1.8</java.version></properties><!-- 项目的依赖 --><dependencies><!-- Spring Boot Web Starter,用于构建Web应用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Cloud Alibaba Nacos Config Starter,用于整合Nacos配置中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Lombok,用于简化Java代码,如自动化生成getters, setters等 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version><optional>true</optional></dependency><!-- Spring Boot Test Starter,用于测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 依赖管理,用于统一管理版本 --><dependencyManagement><dependencies><!-- Spring Cloud Dependencies POM --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR1</version><type>pom</type><scope>import</scope></dependency><!-- Spring Cloud Alibaba Dependencies POM --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><!-- 构建信息 --><build><!-- 插件列表 --><plugins><!-- Spring Boot Maven Plugin,提供了很多便捷的功能,如打包、运行、测试Spring Boot应用等 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2️⃣ 添加配置信息

# 应用名称,用于Nacos配置管理识别spring.application.name=alibaba-nacos-config-client-single# 该应用启动的端口server.port=8003# Nacos配置服务器的地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848

3️⃣ Java代码

// 标明该类是一个Spring Boot应用@SpringBootApplicationpublicclassF_NacosConfigClient_Single{// 主方法,程序入口publicstaticvoidmain(String[]args){// 启动Spring Boot应用SpringApplication.run(F_NacosConfigClient_Single.class,args);}// 使用Slf4j注解为类提供日志功能@Slf4j// RESTful服务的控制器@RestController// @RefreshScope表示该类下的配置属性是可以动态刷新的@RefreshScopestaticclassTestController{// 从配置中心或本地配置文件中注入名为"my.title"的属性值// 如果没有找到该属性,则默认值为空字符串@Value("${my.title:}")privateStringtitle;// 对外提供一个HTTP GET接口,路径为/test@GetMapping("/test")publicStringhello(){// 返回从配置中心获取的title属性值returntitle;}}}

4️⃣ 访问服务

  • 浏览器访问:http://localhost:8003/test

🌌 多个环境管理


🌐 Nacos 配置加载机制与规则

Nacos 提供了多个层次来管理和加载配置。以下是详细的加载规则和机制:


1️⃣ 默认加载规则

在 Nacos 中,当应用采用默认配置进行加载时,其配置文件的识别主要依赖以下三个元素:

  • 🔖 Data ID

    • alibaba-nacos-config-client:对应客户端的配置spring.cloud.nacos.config.prefix。默认值为${spring.application.name},即服务名。
    • properties:对应客户端的配置spring.cloud.nacos.config.file-extension。默认值为properties
  • 👥 Group

    • DEFAULT_GROUP:对应客户端的配置spring.cloud.nacos.config.group。默认值为DEFAULT_GROUP

因此,应用的默认配置规则为:Data ID=${spring.application.name}.propertiesGroup=DEFAULT_GROUP


2️⃣ 示例与应用

例子一:加载特定的 Data ID

spring.cloud.nacos.config.prefix=example

此配置将加载Data ID=example.propertiesGroup=DEFAULT_GROUP的配置内容。

例子二:加载 YAML 格式内容

spring.cloud.nacos.config.prefix=example spring.cloud.nacos.config.file-extension=yaml

此配置将加载Data ID=example.yamlGroup=DEFAULT_GROUP的配置内容。

例子三:加载特定的 Group

spring.cloud.nacos.config.prefix=example spring.cloud.nacos.config.file-extension=yaml spring.cloud.nacos.config.group=DEV_GROUP

此配置将加载Data ID=example.yamlGroup=DEV_GROUP的配置内容。


🤔 深入思考

对于spring.cloud.nacos.config.prefixspring.cloud.nacos.config.file-extension,大多数用户可以直接使用默认配置,或仅通过spring.cloud.nacos.config.file-extension修改配置格式的后缀。

但是,spring.cloud.nacos.config.group可以扮演许多特殊角色,例如:

  • 区分不同产品组下的应用配置,解决应用名冲突问题。
  • 区分不同用途的配置内容。
  • 区分不同环境的配置。

Nacos 提供了丰富的配置维度,使我们能够通过多种方式实现多环境的配置管理。

💡 提示:如果您有任何关于spring.cloud.nacos.config.group的创新应用方法,欢迎分享您的方案。


🌐 多环境管理与 Nacos

Nacos 提供了多种用于管理的概念,包括Data IDGroupNamespace。通过这些层级关系,我们可以根据需要实现多环境的管理。


1️⃣ 使用 Data ID 与 profiles 实现

  • 📜 概述:Data ID 在 Nacos 中代表一个 Spring Cloud 应用的配置文件名。通过spring.profiles.active我们可以指定具体环境,从而动态地构造 Data ID。

  • 🔧 实践步骤

    • 🌱 在 Nacos 中为应用创建不同环境的配置。
    • 🖋 在应用配置中,设置spring.profiles.active=DEV
    • 🚀 启动应用,查看日志,可以看到加载的配置文件信息。

2️⃣ 使用 Group 实现

  • 📜 概述:Group 在 Nacos 中是为了集合管理 Data ID 而存在的。我们可以将不同环境的配置视作一个集合,从而实现多环境管理。

  • 🔧 实践步骤

    • 🌱 在 Nacos 中,利用不同的 Group 来创建不同环境的配置。
    • 🖋 在应用配置中,设置spring.cloud.nacos.config.group=DEV_GROUP
    • 🚀 启动应用,查看日志,可以看到加载的配置文件信息。

3️⃣ 使用 Namespace 实现

  • 📜 概述:Namespace 用于进行租户级别的配置隔离,从而可以实现不同环境的隔离。

  • 🔧 实践步骤

    • 🌱 在 Nacos 中,根据环境名称创建多个 Namespace。
    • 🖋 在应用配置中,通过spring.cloud.nacos.config.namespace指定 Namespace ID。
    • 🚀 启动应用并验证配置是否正确。

👀alibaba-nacos-config-client-profile


1️⃣ 添加依赖

同上

2️⃣ 添加配置信息

# 应用名称,用于Nacos配置管理识别spring.application.name=alibaba-nacos-config-client-profile# 该应用启动的端口server.port=8004# Nacos配置服务器的地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# Nacos配置的前缀,默认为spring.application.name的值spring.cloud.nacos.config.prefix=alibaba-nacos-config-client-profile-dev# 配置文件的扩展名,默认为propertiesspring.cloud.nacos.config.file-extension=properties# Nacos的配置分组,默认为DEFAULT_GROUPspring.cloud.nacos.config.group=DEFAULT_GROUP

3️⃣ Java代码

同上

4️⃣ 访问服务

  • 浏览器访问:http://localhost:8004/test

👀alibaba-nacos-config-client-group


1️⃣ 添加依赖

同上

2️⃣ 添加配置信息

# 应用名称,用于Nacos配置管理识别spring.application.name=alibaba-nacos-config-client-group# 该应用启动的端口server.port=8005# Nacos配置服务器的地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# 针对不同的Profile,可以指定不同的Nacos配置分组spring.cloud.nacos.config.group=DEV_GROUP

3️⃣ Java代码

同上

4️⃣ 访问服务

  • 浏览器访问:http://localhost:8005/test

👀alibaba-nacos-config-client-namespace


1️⃣ 添加依赖

同上

2️⃣ 添加配置信息

# 应用名称,用于Nacos配置管理识别spring.application.name=alibaba-nacos-config-client-namespace# 该应用启动的端口server.port=8006# Nacos配置服务器的地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# Nacos命名空间,用于支持多环境配置spring.cloud.nacos.config.namespace=5e2c56a3-d024-472a-82be-b44400d5089b

3️⃣ Java代码

同上

4️⃣ 访问服务

  • 浏览器访问:http://localhost:8006/test

📂 多文件加载与共享配置

🌐 Nacos 多配置加载指南


1️⃣ 加载多个配置

默认加载规则:

在 Nacos 中,应用默认加载的配置是基于以下三个参数的:

  • 🔖 Data ID: 默认为${spring.application.name}.properties
  • 🔖 File Extension: 默认为properties
  • 👥 Group: 默认为DEFAULT_GROUP
加载额外的配置:

为满足复杂的配置需求,例如加载 Actuator 模块和日志输出的配置,Nacos 提供了spring.cloud.nacos.config.ext-config参数来加载额外的配置文件。

例如,为加载actuator.propertieslog.properties,配置如下:

spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=log.properties spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[1].refresh=true

此外,refresh参数控制配置内容是否支持自动刷新。


2️⃣ 共享配置

Nacos 提供了便捷的方式来实现配置的共享加载。使用以下参数可以简化共享配置的加载:

  • 🔖 Shared Data IDs:spring.cloud.nacos.config.shared-dataids用于定义多个共享配置的 Data Id。
  • 🔄 Refreshable Data IDs:spring.cloud.nacos.config.refreshable-dataids用于定义哪些共享配置的 Data Id 在配置变化时可以动态刷新。

例如:

spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties

3️⃣ 配置加载的优先级

当加载多个配置时,重要的是知道哪个配置的优先级更高。主要存在以下三类配置:

  • A: 通过spring.cloud.nacos.config.shared-dataids定义的共享配置
  • B: 通过spring.cloud.nacos.config.ext-config[n]定义的加载配置
  • C: 基于内部规则拼接出来的配置

从日志可以清晰地看到配置的加载顺序。后加载的配置会覆盖之前的配置,所以优先级关系是:A < B < C


👀alibaba-nacos-config-client-namespace


1️⃣ 添加依赖

同上

2️⃣ 添加配置信息

# 应用名称,用于Nacos配置管理识别spring.application.name=alibaba-nacos-config-client-multiple# 该应用启动的端口server.port=8007# Nacos配置服务器的地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# 配置多个扩展配置源,每个源有自己的data-id、group和refresh策略spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=log.properties spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[1].refresh=true# 指定共享的配置dataidsspring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties# 指定需要自动刷新的配置dataidsspring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties

3️⃣ Java代码

// 标明该类是一个Spring Boot应用@SpringBootApplicationpublicclassF_NacosConfigClient_Multiple{// 主方法,程序入口publicstaticvoidmain(String[]args){// 启动Spring Boot应用SpringApplication.run(F_NacosConfigClient_Multiple.class,args);}// 使用Slf4j注解为类提供日志功能@Slf4j// RESTful服务的控制器@RestController// @RefreshScope表示该类下的配置属性是可以动态刷新的@RefreshScopestaticclassTestController{// 从配置中心或本地配置文件中注入名为"my.title"的属性值// 如果没有找到该属性,则默认值为空字符串@Value("${my.title.log:}")privateStringlogStr;@Value("${my.title.actuator:}")privateStringactuatorStr;// 对外提供一个HTTP GET接口,路径为/test@GetMapping("/test")publicStringhello(){// 返回从配置中心获取的title属性值returnlogStr+actuatorStr;}}}

4️⃣ 访问服务

  • 浏览器访问:http://localhost:8007/test

📘Nacos 数据持久化配置指南


I. 🌐 默认配置

在我们的探索中, 我们采用了 Nacos 的默认单机模式. 适合测试, 但生产环境需高可用配置. 正因如此, Nacos 的数据持久化策略需转向 MySQL.


II. 🛢 数据库配置

  1. 🔧 安装:

    • 要求: MySQL 5.6.5+。
  2. 📜 初始化:

    • 运行nacos-mysql.sql(在 Nacos 包的 conf 目录).
    • 之后, 你将见到预设的表结构。

III. 🛠 Nacos 配置调整

  1. ⚙️ 修改配置:
    • 位置:conf/application.properties(在 Nacos 的目录内)
    • 目的: 配置 MySQL 数据源。
    • 示例:
      spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=

完成后, 启动 Nacos. 配合 MySQL 工具, 你可以确认数据已存入数据库。


http://www.jsqmd.com/news/819720/

相关文章:

  • TQVaultAE:彻底解决《泰坦之旅》仓库空间不足的终极方案
  • 粮食安全政策托底,农业ETF(562900.SH)交易活跃度升温
  • 2026年可定制化的企业餐饮外包服务/工厂餐饮外包服务/公司餐饮外包服务优质公司推荐 - 品牌宣传支持者
  • 2026年知名的工厂食堂餐饮外包服务/园区餐饮外包服务/公司餐饮外包服务/学校餐饮外包服务靠谱公司推荐 - 行业平台推荐
  • AIGC前沿实践:GPTimage2系列模型技术解析与高效集成指南
  • AI辅助游戏开发:Claude-Code-Game-Studios项目实战解析
  • 惠普CP1025打印一半就空白?别急着换硒鼓,可能是这个几毛钱小零件在‘偷懒’
  • LLM Wiki 完整文件目录详解:wiki/concepts:按 主题聚合 多个源摘要的信息
  • AI智能体架构解析:从LLM工具调用到自动化工作流实战
  • 别再死磕正点原子代码了!用STM32CubeMX HAL库5分钟搞定8080并口LCD驱动(附FSMC避坑指南)
  • ComfyUI与ChatGPT API集成:自然语言驱动AI绘画工作流实践
  • 宝鸡离婚咨询哪家好?2026宝鸡律师咨事务所推荐:华格领衔,专业资深宝鸡离婚咨询律所精选 - 栗子测评
  • 动力母线生产厂家哪家好?2026年铝基动力母线厂家/铝动力母线厂家推荐:双嘉领衔 - 栗子测评
  • 别只看参数!手把手教你用正点原子DS100抓取并分析PWM波形(附数据导出教程)
  • PyFluent终极指南:如何用Python自动化CFD仿真,提升10倍工作效率
  • Node.js API错误处理库设计:标准化响应与中间件实践
  • 机器人灵巧操作学习:从OpenClaw项目看强化学习与仿真实践
  • 航空航天电子系统中的信号切换与仿真技术解析
  • 构建个人数字档案馆:用静态站点生成器永久保存思想印记
  • postgressql查询语法
  • 2026年靠谱的亚克力/亚克力指示牌精选推荐公司 - 品牌宣传支持者
  • 铁路光纤熔接机推荐:鼎讯 TY-30H 性能参数与应用场景
  • Canvas粒子系统实现动态星空:从原理到性能优化的前端动画实践
  • Perplexity MLA格式支持突然中断,紧急补救清单与本地缓存回滚操作手册
  • 2026优质新疆青少年行为矫正学校/新疆叛逆青少年特训学校盘点与推荐:晨露沐阳领衔 - 栗子测评
  • ARM PMU性能监控单元架构与实战指南
  • 终极PHPExcel性能优化指南:从512MB到1GB内存的突破技巧
  • 3个核心优势:Bebas Neue字体如何重塑现代设计工作流
  • ClawMapper:高效数据映射工具的设计原理与实战应用
  • 2026年靠谱的电触点/植入式医疗电触点/神经刺激器电触点/微型医疗导电触点生产厂家 - 行业平台推荐