项目集成Nacos配置中心
一、集成配置中心
1.将应用配置从本地配置文件迁移到nacos配置中心
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)配置项详解
(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、多环境命名空间创建
进入左侧菜单【平台管理】→【命名空间】,点击右上角【新建命名空间】,创建三套环境隔离空间:
2、新增配置
(1)进入【配置管理】→【配置列表】,切换至对应命名空间后点击【新增配置】
(2)基础参数示例
Data ID : ruoyi-admin
配置格式:YAML
配置内容:实际的配置数据,例如:
test:
msg: wmc4568971.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] success2、动态刷新测试
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 empty2、修改配置后接口依旧返回旧值
未添加@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: 9880nacos的三个端口
错误原因是在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 鉴权机制,创建最小权限环境账号,保证不同环境配置数据安全,规避超级管理员账号滥用风险。