跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Spring Boot 整合 Nacos 配置中心:动态刷新与多环境管理

综述由AI生成Spring Boot 整合 Nacos 配置中心实现动态配置刷新与多环境管理。通过引入 nacos-config-spring-boot-starter 依赖,在 Nacos 控制台创建命名空间隔离开发、测试及生产环境。利用 @RefreshScope 注解或 NacosContextRefresher 实现配置修改后无需重启服务即可生效。支持通过启动参数指定环境切换,并可通过 shared-configs 实现配置分层共享。解决了版本匹配冲突问题,提供了常见问题避坑指南。

Qiny01发布于 2026/3/16更新于 2026/4/2613 浏览

前置准备

1. 环境要求
  • JDK 8+(推荐 1.8)
  • Maven 3.6+
  • Nacos 2.x 稳定版(如 2.3.0/2.4.0,已启动并可访问控制台)
  • Spring Boot 2.7.x(和 Spring Cloud Alibaba 版本匹配,避免冲突)
2. 版本匹配(关键!避免踩坑)

Spring Boot 和 Spring Cloud Alibaba 的版本必须对应,以下是经过验证的稳定组合:

Spring Boot 版本Spring Cloud Alibaba 版本Nacos 版本
2.7.152021.0.6.02.3.0/2.4.0
2.6.132021.0.5.02.2.3/2.3.0

步骤 1:创建 Spring Boot 项目并引入依赖

1.1 新建 Maven 项目(或 Spring Initializr)

在 pom.xml 中引入核心依赖,重点是 nacos-config-spring-boot-starter(Nacos 配置中心核心依赖):

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.15</version> <relativePath/> </> com.example nacos-config-demo 1.0.0 nacos-config-demo    org.springframework.boot spring-boot-starter-web    com.alibaba.boot nacos-config-spring-boot-starter 0.2.12    com.alibaba.nacos nacos-client      com.alibaba.nacos nacos-client 2.3.0    org.projectlombok lombok true    org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin    org.projectlombok lombok       
parent
<groupId>
</groupId>
<artifactId>
</artifactId>
<version>
</version>
<name>
</name>
<dependencies>
<!-- Spring Boot Web Starter(提供接口测试) -->
<dependency>
<groupId>
</groupId>
<artifactId>
</artifactId>
</dependency>
<!-- Nacos 配置中心 Starter(核心依赖) -->
<dependency>
<groupId>
</groupId>
<artifactId>
</artifactId>
<version>
</version>
<!-- 排除内置的低版本 nacos-client,避免冲突 -->
<exclusions>
<exclusion>
<groupId>
</groupId>
<artifactId>
</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 适配 Nacos 2.x 的客户端版本 -->
<dependency>
<groupId>
</groupId>
<artifactId>
</artifactId>
<version>
</version>
</dependency>
<!-- lombok(简化代码,可选) -->
<dependency>
<groupId>
</groupId>
<artifactId>
</artifactId>
<optional>
</optional>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>
</groupId>
<artifactId>
</artifactId>
<scope>
</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
</groupId>
<artifactId>
</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>
</groupId>
<artifactId>
</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

步骤 2:Nacos 控制台配置多环境配置集

先在 Nacos 控制台创建开发(dev)、测试(test)、生产(prod)三个环境的配置,后续项目可动态切换。

2.1 创建命名空间(环境隔离,核心!)
  1. 打开 Nacos 控制台(http://127.0.0.1:8848/nacos,账号密码:nacos/nacos);
  2. 左侧菜单「命名空间」→「新建命名空间」:
    • 开发环境:名称 dev,描述开发环境,自动生成命名空间 ID(如 dev-123,记下来!);
    • 测试环境:名称 test,描述测试环境,命名空间 ID(如 test-456);
    • 生产环境:名称 prod,描述生产环境,命名空间 ID(如 prod-789);
    • 注:默认命名空间 ID 为 public,建议不用,专用于环境隔离。
2.2 编写各环境配置集

以开发环境(dev)为例,创建配置集:

  1. 左侧菜单「配置管理→配置列表」→ 顶部选择 dev 命名空间 →「+」;
  2. 配置信息:
    • Data ID:nacos-config-demo.yml(建议和项目名一致,后缀.yml/properties);
    • Group:DEFAULT_GROUP(默认分组,也可自定义如 GROUP_DEMO);
    • 配置格式:YAML;
  3. 点击「发布」,完成开发环境配置创建。

配置内容:

# 开发环境配置
server:
  port: 8081 # 开发环境端口
demo:
  name: "开发环境 - 测试名称"
  desc: "这是开发环境的动态配置"

同理,创建 test/prod 命名空间的配置集:

生产环境(prod)配置内容:

server:
  port: 8083
demo:
  name: "生产环境 - 测试名称"
  desc: "这是生产环境的动态配置"

测试环境(test)配置内容:

server:
  port: 8082
demo:
  name: "测试环境 - 测试名称"
  desc: "这是测试环境的动态配置"

步骤 3:项目配置文件编写(连接 Nacos + 指定环境)

在项目 resources 目录下创建 application.yml,配置 Nacos 连接信息和默认环境:

# Spring Boot 核心配置
spring:
  application:
    name: nacos-config-demo # 应用名,和 Nacos 的 Data ID 前缀一致
  # Nacos 配置中心配置
  nacos:
    config:
      server-addr: 127.0.0.1:8848 # Nacos 服务端地址(单机),集群写多个如 127.0.0.1:8848,127.0.0.1:8849
      namespace: dev-123 # 要连接的命名空间 ID(dev 环境,可切换为 test-456/prod-789)
      group: DEFAULT_GROUP # 配置分组,和 Nacos 控制台一致
      data-id: nacos-config-demo.yml # 配置集 ID,和 Nacos 控制台一致
      type: YAML # 配置格式,和 Nacos 控制台一致
      refresh-enabled: true # 开启配置自动刷新(关键!)

步骤 4:实现动态配置刷新(核心功能)

Nacos 配置中心的核心优势是「动态刷新」,修改 Nacos 配置后无需重启服务,有两种常用实现方式,推荐第一种(简单易用)。

4.1 方式 1:@RefreshScope 注解(推荐)

创建 DemoController,通过 @Value 注入 Nacos 配置,并添加 @RefreshScope 实现动态刷新:

package com.example.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试动态配置刷新和多环境配置
 */
@RestController
@RefreshScope // 核心注解:开启配置刷新,修改 Nacos 配置后自动更新
public class DemoController {
    // 注入 Nacos 中的配置项
    @Value("${demo.name:默认名称}") // 冒号后是默认值,防止配置不存在报错
    private String demoName;
    @Value("${demo.desc:默认描述}")
    private String demoDesc;
    @Value("${server.port:8080}")
    private String serverPort;

    /**
     * 接口:获取配置信息
     */
    @GetMapping("/getConfig")
    public String getConfig() {
        return String.format(
            "当前环境端口:%s <br/> demo.name:%s <br/> demo.desc:%s",
            serverPort, demoName, demoDesc
        );
    }
}
4.2 方式 2:NacosContextRefresher(手动刷新,进阶)

若需要手动触发配置刷新(如接口触发),可注入 NacosContextRefresher:

package com.example.controller;
import com.alibaba.boot.nacos.config.context.event.NacosContextRefresher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RefreshController {
    @Autowired
    private NacosContextRefresher nacosContextRefresher;

    /**
     * 手动触发配置刷新接口
     */
    @GetMapping("/refreshConfig")
    public String refreshConfig() {
        nacosContextRefresher.refresh(); // 手动刷新配置
        return "配置刷新成功!";
    }
}
4.3 启动类编写

创建 NacosConfigDemoApplication,无特殊配置,仅需 @SpringBootApplication:

package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class NacosConfigDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigDemoApplication.class, args);
    }
}

步骤 5:测试验证(核心!验证效果)

5.1 验证动态配置刷新
  1. 启动 Spring Boot 项目,访问接口:http://127.0.0.1:8081/getConfig;
    • 输出:当前环境端口:8081 <br/> demo.name:开发环境 - 测试名称 <br/> demo.desc:这是开发环境的动态配置;
  2. 打开 Nacos 控制台→dev 命名空间→编辑 nacos-config-demo.yml:
    • 修改 demo.name 为 开发环境 - 修改后的名称,demo.desc 为 开发环境动态刷新测试;
    • 点击「发布」;
  3. 无需重启项目,再次访问 http://127.0.0.1:8081/getConfig;
    • 输出:当前环境端口:8081 <br/> demo.name:开发环境 - 修改后的名称 <br/> demo.desc:开发环境动态刷新测试;
    • ✅ 验证成功:配置已动态刷新,无需重启服务!
5.2 验证多环境配置切换
  1. 停止项目,修改 application.yml 中的 nacos.config.namespace 为 test-456(测试环境命名空间 ID);
  2. 重启项目,访问 http://127.0.0.1:8082/getConfig;
    • 输出:当前环境端口:8082 <br/> demo.name:测试环境 - 测试名称 <br/> demo.desc:这是测试环境的动态配置;
  3. 同理,切换为 prod-789(生产环境),重启后访问 http://127.0.0.1:8083/getConfig,会显示生产环境配置;
    • ✅ 验证成功:多环境配置隔离生效!

进阶:多环境配置最佳实践(生产级)

上述方式通过修改 namespace 切换环境,适合开发阶段;生产环境推荐「启动参数指定环境」,无需修改配置文件:

1. 启动时指定环境(推荐)

打包项目为 JAR 包后,通过启动参数指定命名空间(环境):

# 开发环境
java -jar nacos-config-demo-1.0.0.jar --nacos.config.namespace=dev-123
# 测试环境
java -jar nacos-config-demo-1.0.0.jar --nacos.config.namespace=test-456
# 生产环境
java -jar nacos-config-demo-1.0.0.jar --nacos.config.namespace=prod-789
2. 配置分层(多服务共享配置)

生产环境中,多个服务可能共享部分配置(如数据库连接),可通过 shared-configs 配置共享配置集:

nacos:
  config:
    server-addr: 127.0.0.1:8848
    namespace: dev-123
    group: DEFAULT_GROUP
    data-id: nacos-config-demo.yml
    type: YAML
    refresh-enabled: true
    # 配置共享配置集(多个服务共用)
    shared-configs:
      - data-id: common-db.yml # 数据库共享配置
        group: DEFAULT_GROUP
        refresh: true # 共享配置也支持动态刷新
      - data-id: common-redis.yml # Redis 共享配置
        group: DEFAULT_GROUP
        refresh: true

常见问题 & 避坑指南

  1. 配置不刷新:
    • 检查 nacos.config.refresh-enabled=true 是否开启;
    • 检查是否添加 @RefreshScope 注解(仅作用于 Bean,需加在 Controller/Service 上);
    • 检查 Nacos 配置的 Data ID/Group/Namespace 是否和项目配置一致。
  2. 版本冲突:
    • 严格按照「前置准备」中的版本匹配表选择依赖版本;
    • 排除 nacos-config-spring-boot-starter 内置的低版本 nacos-client。
  3. 配置读取不到:
    • 检查 Nacos 服务端地址是否正确(集群需用逗号分隔);
    • 检查命名空间 ID 是否填错(不是名称,是自动生成的 ID);
    • @Value 注解添加默认值(如 ${demo.name:默认值}),避免配置不存在导致启动失败。
总结
  1. Spring Boot 整合 Nacos 配置中心的核心是引入 nacos-config-spring-boot-starter,配置 Nacos 连接信息(地址、命名空间、Data ID);
  2. 动态配置刷新的关键是开启 refresh-enabled=true,并在需要刷新的 Bean 上添加 @RefreshScope 注解;
  3. 多环境配置通过「命名空间(Namespace)」隔离,生产环境推荐用启动参数指定命名空间,避免修改配置文件;
  4. 生产环境可通过 shared-configs 实现配置分层,提升配置管理效率。

目录

  1. 前置准备
  2. 1. 环境要求
  3. 2. 版本匹配(关键!避免踩坑)
  4. 步骤 1:创建 Spring Boot 项目并引入依赖
  5. 1.1 新建 Maven 项目(或 Spring Initializr)
  6. 步骤 2:Nacos 控制台配置多环境配置集
  7. 2.1 创建命名空间(环境隔离,核心!)
  8. 2.2 编写各环境配置集
  9. 开发环境配置
  10. 步骤 3:项目配置文件编写(连接 Nacos + 指定环境)
  11. Spring Boot 核心配置
  12. Nacos 配置中心配置
  13. 步骤 4:实现动态配置刷新(核心功能)
  14. 4.1 方式 1:@RefreshScope 注解(推荐)
  15. 4.2 方式 2:NacosContextRefresher(手动刷新,进阶)
  16. 4.3 启动类编写
  17. 步骤 5:测试验证(核心!验证效果)
  18. 5.1 验证动态配置刷新
  19. 5.2 验证多环境配置切换
  20. 进阶:多环境配置最佳实践(生产级)
  21. 1. 启动时指定环境(推荐)
  22. 开发环境
  23. 测试环境
  24. 生产环境
  25. 2. 配置分层(多服务共享配置)
  26. 常见问题 & 避坑指南
  27. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Next AI Draw.io 开源项目部署与使用指南:一句话生成流程图
  • ELK 与 ELFKK 日志采集架构对比及 Filebeat 配置指南
  • MySQL 存储过程、游标与触发器详解
  • VSCode 远程开发:Linux 服务器 C++ 调试配置流程
  • 2026 年程序员技术趋势:AI Agent、国产算力与云原生发展
  • RAG 应用落地关键痛点与解决策略分析
  • Java IO API 获取文件元素的方法
  • Protobuf、JSON、XML 核心对比与 C++ 实现
  • Clang 17 下的 C++26 特性实战指南
  • 基于 Unity 开发 Pico VR 基础应用:从环境搭建到实战部署
  • K8s 集群外通过路由直连 Pod 实战
  • OpenClaw 实战:让 AI 拥有“眼睛“——摄像头访问完全指南
  • OpenClaw 手机端部署与实战指南
  • B站直播神器:神奇弹幕机器人完整使用教程
  • 基于 Django 框架和 Python 的社团活动管理微信小程序设计实现
  • OpenClaw macOS Sequoia M1 Pro 架构安装指南
  • Java 21 虚拟线程:核心特性与最佳实践
  • 高德云图 WebGIS 前端技术面试真题及解析
  • TeleGrip 基于 VR 的机械臂遥操作系统源码解析
  • 字节跳动前端社招面试经验总结

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online