【微服务】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());
    }
}

控制台输出:

相关推荐
澈2073 小时前
C++并查集:高效解决连通性问题
java·c++·算法
2401_873479405 小时前
运营活动被薅羊毛怎么防?用IP查询+设备指纹联动封堵漏洞
java·网络·tcp/ip·github
ShiJiuD6668889995 小时前
大事件板块一
java
摇滚侠5 小时前
@Autowired 和 @Resource 的区别
java·开发语言
SeaTunnel5 小时前
(八)收官篇 | 数据平台最后一公里:数据集成开发设计与上线治理实战
java·大数据·开发语言·白鲸开源
Ting-yu5 小时前
SpringCloud快速入门(7)---- 数据隔离
spring boot·spring·spring cloud
吴声子夜歌6 小时前
Java——线程的基本协作机制
java·线程协作
谙弆悕博士6 小时前
【附C++源码】从零开始实现 2048 游戏
java·c++·游戏·源码·项目实战·2048
独自归家的兔7 小时前
OCPP 1.6 协议详解:GetLocalListVersion 获取本地列表版本指令
java·后端·物联网·spring·ocpp1.6
Apache RocketMQ8 小时前
RocketMQ源码解析——秒级定时消息介绍
java·云原生·消息队列·rocketmq·java-rocketmq