【微服务】Nacos 配置动态刷新(简易版)(附配置)

文章目录

1、实现方法

环境:Nacos、Java、SpringBoot等

主要是在boostrap.yaml中的data-id属性下配置refresh:true来实现动态更新

2、配置依赖 + yaml

具体的版本参考官方的说明:官方版本说明

xml 复制代码
 <!--读取bootstrap文件-->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bootstrap</artifactId>
 </dependency>
 <!--统一配置管理-->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>
 <!--nacos 服务注册发现-->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>

boostrap.yaml 配置

yaml 复制代码
spring:
  application:
    name: xxx-service # 微服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: xxx.xxx.xxx.xxx:8848  # Nacos 地址
      config:
        namespace: xxxxxxxxxxxxxxxxxxx  # 命名空间
        file-extension: yaml
        shared-configs:
          - data-id: shared-common.yaml
            refresh: true  # 要开启刷新配置,下面的同理
          - data-id: shared-redis.yaml
            refresh: true
          - data-id: shared-jdbc.yaml
            refresh: true
          - data-id: shared-log.yaml
            refresh: true
          - data-id: shared-swagger.yaml
            refresh: true
          - data-id: shared-sentinel.yaml
            refresh: true
      discovery:
        namespace: xxxxxxxxxxxxxxxx  # 命名空间

3、验证效果

配置监听,更新时打印配置到控制台

java 复制代码
package com.lingchuangdao.creator.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.cloud.context.scope.refresh.RefreshScopeRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.util.Set;

/**
 * 监听配置变更事件,并打印所有变更的属性。
 */
@Component
@Slf4j
public class ConfigRefreshListener {

    private final Environment environment;

    public ConfigRefreshListener(Environment environment) {
        this.environment = environment;
    }

    @EventListener
    public void onEnvironmentChangeEvent(EnvironmentChangeEvent event) {
        Set<String> keys = event.getKeys();
        log.info("配置已更新,变更的属性数量: {}", keys.size());
        
        // 打印所有变更的配置项
        for (String key : keys) {
            log.info("配置变更 - 属性: {}, 新值: {}", key, environment.getProperty(key));
        }
    }
    
    @EventListener
    public void onRefreshScopeRefreshed(RefreshScopeRefreshedEvent event) {
        log.info("RefreshScope已刷新,Bean: {}", event.getName());
    }
}

控制台输出:

相关推荐
SeaDhdhdhdhdh2 小时前
MCP Server 搭建与使用指南
java·ai·agent·mcp
YH55269843 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
AI_小站3 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
普通网友4 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
许彰午4 小时前
03-三种开发模式
java·架构
涟漪海洋4 小时前
创建最新的JDK25镜像,非root环境启动
java
Rain的Java大神之路5 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
孙克旭_5 小时前
Docker 镜像构建|Vue+SpringBoot+Go 多语言项目 Dockerfile 案例
linux·运维·vue.js·spring boot·docker·dockerfile
2602_959960925 小时前
谢飞机面试大厂:Spring Boot、JVM、Redis、Kafka、微服务与音视频搜索场景求生实录
java·jvm·spring boot·redis·面试题
Zane1994126 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言