项目集成Nacos配置中心

王梦婵 16 阅读 技术分享

一、集成配置中心

1.将应用配置从本地配置文件迁移到nacos配置中心

2.实现配置的动态刷新:修改配置后无需重启应用即可生效

3.实现配置的集中管理:多环境配置统一维护

二、版本信息

组件

版本

说明

JDK

21

项目编译与运行环境

Spring Boot

3.5.15

基础框架

Spring Cloud

2025.0.0

微服务框架

Spring Cloud Alibaba

2025.0.0.0

Nacos 集成

Nacos Server

3.2.3

配置中心服务端

三、接入nacos配置

1、依赖配置

(1)在父pox.xml中声明并引入spring cloud

<properties>
    <spring-cloud.version>2025.0.0</spring-cloud.version>
    <spring-cloud-alibaba.version>2025.0.0.0</spring-cloud-alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!-- Spring Cloud BOM -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Spring Cloud Alibaba BOM -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

(2)ruoyi-admin/pom.xml依赖

<!-- Spring Cloud Alibaba Nacos 配置中心 -->
<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

2、配置说明

(1)配置项详解

配置项

值

说明

server-addr

192.168.110.116:8848

Nacos 服务器地址

namespace

public

命名空间,用于隔离不同环境(开发/测试/生产)

group

DEFAULT_GROUP

分组,用于隔离不同业务

file-extension

yaml

配置文件格式

refresh-enabled

true

开启配置自动刷新

spring.config.import

nacos:ruoyi-admin

从 Nacos 加载 ruoyi-admin的配置

(2)application.yml配置

在application.yml中添加 Nacos 连接配置

spring:
  application:
    name: ruoyi-admin
  # Nacos 配置中心
  cloud:
    nacos:
      config:
        # Nacos 服务器地址
        server-addr: Nacos_IP:Nacos_Port
        username: ems_@profiles.active@
        password: *********
        # 命名空间
        namespace: @profiles.active@
        # 分组
        group: EMS_GROUP_@profiles.active@
        # 配置文件扩展名
        file-extension: yaml
        # 开启自动刷新
        refresh-enabled: true
  # 从 Nacos 配置中心加载配置
  config:
    import:
      - nacos:EMS-@profiles.active@
# @profiles.active@对应开发、测试、生产环境

四、Nacos配置

1、多环境命名空间创建

进入左侧菜单【平台管理】→【命名空间】,点击右上角【新建命名空间】,创建三套环境隔离空间:

命名空间名称

命名空间ID

描述

dev

dev

开发环境(本地开发调试)

test

test

测试环境,测试验收使用

prod

prod

线上生产正式环境

2、新增配置

(1)进入【配置管理】→【配置列表】,切换至对应命名空间后点击【新增配置】

(2)基础参数示例

Data ID : ruoyi-admin

配置格式:YAML

配置内容:实际的配置数据,例如:

test:
  msg: wmc456897

1.EMS-dev——开发环境配置

# 开发环境数据库配置示例
spring:
  datasource:
    dynamic:
      datasource:
        master:
          url: jdbc:mysql://db_server:db_port/db_name
          username: db_user
          password: db_passwd
......

2.EMS-test——测试环境配置

3.EMS-prod——生产环境配置

每个环境一个独立的Data ID,通过@profiles.active@动态选择加载

3、账号权限规划

创建环境专用账号:

  • 用户:ems_dev,仅授予dev命名空间只读权限,用于开发环境项目连接

  • 用户:ems_test,仅授予test命名空间只读权限,用于测试环境项目连接

  • 用户:ems_prod,仅授予prod命名空间只读权限,用于生产环境项目连接

新建用户默认无任何访问权限,需要进入【权限控制】→【角色管理】→【权限管理】,给账号绑定命名空间读写权限,否则项目启动报403错误。

五、代码使用

1、获取配置

/**
 * 使用 @Value 注入配置值
 * 配合 @RefreshScope 实现动态刷新
 */
@SaIgnore
@RestController
@RefreshScope  // 关键:支持配置动态刷新
public class ConfigController {

    @Value("${test.msg}")
    private String testMsg;

    @Resource
    private ConfigService configService;

    @GetMapping("/getMsg")
    public String getMsg() {
        return testMsg;
    }

    /**
     * 检查 Nacos 服务端状态
     */
    @GetMapping("/serverStatus")
    public String serverStatus() {
        return "Nacos 服务端状态: " + configService.getServerStatus();
    }
}

(1)@RefreshScope 是 Spring Cloud 提供的注解,标注在 Bean 上后,当 Nacos 中的配置发生变更时,该 Bean 会被重新创建,从而读取到最新配置。

2、配置刷新原理

Nacos 控制台修改配置
        │
        ▼
Nacos Server 推送变更事件
        │
        ▼
Spring Cloud Nacos Config 接收事件
        │
        ▼
@RefreshScope Bean 销毁重建
        │
        ▼
@Value / @ConfigurationProperties 重新绑定
        │
        ▼
应用自动使用新配置(无需重启)

六、启动验证

1、Nacos配置加载成功

//在项目中集成nacos成功日志
[Nacos Config] Load config[dataId=ruoyi-admin-dev, group=DEFAULT_GROUP] success

2、动态刷新测试

http://localhost:8080/getMsg //测试动态配置
http://localhost:8080/serverStatus //查看nacos服务端状态

七、集成过程中的问题

1、提示配置为空

日志中出现以下输出,原因是在nacos控制台中与配置文件中配置的dataId不一致。需要确认dataId拼写正确、确认分组。

2026-08-28 15:07:17 [main] WARN  c.a.c.n.c.NacosConfigDataLoader
 - [Nacos Config] config[dataId=testdew, group=DEFAULT_GROUP] is empty

2、修改配置后接口依旧返回旧值

未添加@RefreshScope注解,需要在使用@Value或者@configurationProperties的Bean上添加@RefreshScope。

3、客户端连错了grpc端口

//错误信息
Server check fail, please check server 192.168.110.116, port 9880 is available
Connection refused: getsockopt: /192.168.110.116:9880
grpc client connection server: 192.168.110.116 ip, serverPort: 9880

nacos的三个端口

端口

名称

用途

说明

8880

界面访问端口

浏览器打开 Nacos 控制台

http://192.168.110.116:8880/nacos

8848

API 端口

客户端与 Nacos 通信的 HTTP 端口

spring.cloud.nacos.config.server-addr 应该填这个

9848

通讯端口(gRPC)

Nacos 长连接通信端口

Nacos 集群节点之间内部通信端口集群间同步数据,业务客户端不需要访问

错误原因是在application.yml中配置的界面端口为server-addr: nacos_server:8880。Nacos 服务端的 gRPC 端口是固定独立端口 9848,8880为界面访问端口,api端口应该是8848

解决方法:将 application.yml 中的 server-addr 从 8880 改为 8848, server-addr: 192.168.110.116:8848

八、总结

本次完成了 SpringBoot3.5.15 + Nacos3.2.3 最新版本的配置中心完整集成,摒弃传统本地配置文件,实现了项目配置的统一托管、环境隔离、动态刷新。通过 Nacos 命名空间(dev/test/prod)与自定义业务分组,严格区分开发、测试、生产环境配置,避免多环境配置互相覆盖与污染。同时开启 Nacos 鉴权机制,创建最小权限环境账号,保证不同环境配置数据安全,规避超级管理员账号滥用风险。