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;
    }
}
配置说明
    1. @RefreshScope 注解
      • 该注解用于实现配置的动态刷新
      • 当 Nacos 中的配置发生变化时,标记了该注解的 Bean 会重新创建
    1. @Value 注解
      • 用于注入配置属性值
      • ${config.info:11} 表示如果 config.info 不存在则使用默认值 11
    1. @NacosConfig 注解
      • 这是 Spring Cloud Alibaba 提供的新注解
      • 用于直接绑定 Nacos 配置中的特定值
    1. Bootstrap 配置
      • spring.cloud.nacos.config.refresh-enabled=true 启用配置自动刷新
      • spring.config.import=nacos:nacos-dynamic 导入 Nacos 配置
测试配置动态刷新
    1. 启动 Nacos Server 3.0.2
    1. 在 Nacos 控制台创建 Data ID 为 nacos-dynamic,Group 为 demo 的配置
    1. 配置内容示例:
       config:
      info: "这是来自Nacos的配置信息"
       rate: "5"
      
    1. 启动应用
    1. 访问 http://localhost:8081/config/info 查看配置值
    1. 在 Nacos 控制台修改配置并发布
    1. 再次访问接口,可以看到配置已更新
注意事项
    1. 必须引入 spring-cloud-starter-bootstrap 依赖才能正确加载 bootstrap 配置
    1. @RefreshScope 注解是实现配置刷新的关键
    1. 使用 @NacosConfig 注解可以直接绑定配置中的特定字段
    1. 可配置refresh-enabled: false再通过 Actuator 的 /actuator/refresh 端点也可以手动触发刷新
总结

本文展示了如何在最新的技术栈中使用 Spring Cloud Alibaba Nacos 实现配置的动态刷新。通过合理的配置和注解使用,我们可以轻松地在微服务架构中管理统一配置,并实现配置变更时的实时更新,这对于构建弹性、可维护的微服务系统具有重要意义。