JDK25+spring-cloud-2025.0.0+spring-cloud-alibaba-2025.0.0.0使用nacos实现配置动态刷新
JDK25+spring-cloud-2025.0.0+spring-cloud-alibaba-2025.0.0.0使用nacos3.0.2实现配置动态刷新
在微服务架构中,统一配置管理是一个重要组成部分。Spring Cloud Alibaba Nacos Config 提供了配置中心的功能,能够实现配置的动态更新。本文将介绍如何在最新的技术栈中(JDK25 + Spring Cloud 2025.0.0 + Spring Cloud Alibaba 2025.0.0.0 + Nacos 3.0.2)实现配置的动态刷新。
环境准备
- JDK 25
- Spring Cloud 2025.0.0
- Spring Cloud Alibaba 2025.0.0.0
- Nacos Server 3.0.2
创建项目
首先创建一个 Spring Boot 项目,并添加必要的依赖。
pom.xml 关键配置:
<properties>
<java.version>25</java.version>
<spring-cloud.version>2025.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2025.0.0.0</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 添加bootstrap配置支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
配置文件
bootstrap.yaml 配置:
spring:
application:
name: nacos-dynamic
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
refresh-enabled: true
namespace: 085bab45-612a-49f1-a788-963fc0d3b52e
group: demo
file-extension: yaml
config:
import:
- nacos:nacos-dynamic
application.yaml 配置:
spring:
application:
name: nacos-dynamic
server:
port: 8081
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logging:
level:
root: info
com.alibaba.cloud.nacos: debug
控制器实现
创建一个控制器来演示配置的动态刷新:
package com.mixfate.nacos_dynamic.controller;
import com.alibaba.cloud.nacos.annotation.NacosConfig;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/")
@RefreshScope
public class ConfigController {
public ConfigController() {
log.info("init ConfigController");
}
@Value("${config.info:11}")
private String configInfo;
@NacosConfig(dataId = "nacos-dynamic", group = "demo", key = "rate")
String rate;
@NacosConfig(dataId = "nacos-dynamic", group = "demo", key = "config.info")
String info;
@GetMapping("/config/info")
public String getConfigInfo() {
log.info("get rate: {}", rate);
log.info("get config info: {}", configInfo);
log.info("get info: {}", info);
return configInfo;
}
}
配置说明
-
- @RefreshScope 注解:
- 该注解用于实现配置的动态刷新
- 当 Nacos 中的配置发生变化时,标记了该注解的 Bean 会重新创建
- @RefreshScope 注解:
-
- @Value 注解:
- 用于注入配置属性值
${config.info:11}表示如果 config.info 不存在则使用默认值 11
- @Value 注解:
-
- @NacosConfig 注解:
- 这是 Spring Cloud Alibaba 提供的新注解
- 用于直接绑定 Nacos 配置中的特定值
- @NacosConfig 注解:
-
- Bootstrap 配置:
spring.cloud.nacos.config.refresh-enabled=true启用配置自动刷新spring.config.import=nacos:nacos-dynamic导入 Nacos 配置
- Bootstrap 配置:
测试配置动态刷新
-
- 启动 Nacos Server 3.0.2
-
- 在 Nacos 控制台创建 Data ID 为
nacos-dynamic,Group 为demo的配置
- 在 Nacos 控制台创建 Data ID 为
-
- 配置内容示例:
config: info: "这是来自Nacos的配置信息" rate: "5"
- 配置内容示例:
-
- 启动应用
-
- 访问
http://localhost:8081/config/info查看配置值
- 访问
-
- 在 Nacos 控制台修改配置并发布
-
- 再次访问接口,可以看到配置已更新
注意事项
-
- 必须引入
spring-cloud-starter-bootstrap依赖才能正确加载 bootstrap 配置
- 必须引入
-
@RefreshScope注解是实现配置刷新的关键
-
- 使用
@NacosConfig注解可以直接绑定配置中的特定字段
- 使用
-
- 可配置
refresh-enabled: false再通过 Actuator 的/actuator/refresh端点也可以手动触发刷新
- 可配置
总结
本文展示了如何在最新的技术栈中使用 Spring Cloud Alibaba Nacos 实现配置的动态刷新。通过合理的配置和注解使用,我们可以轻松地在微服务架构中管理统一配置,并实现配置变更时的实时更新,这对于构建弹性、可维护的微服务系统具有重要意义。
