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

控制台输出:

相关推荐
老朋友此林1 小时前
MongoDB GEO 项目场景 ms-scope 实战
java·数据库·spring boot·mongodb
豆沙沙包?2 小时前
2025年--Lc165--H637.二叉树的层平均值(二叉树的层序遍历)--Java版
java·开发语言
迎風吹頭髮3 小时前
UNIX下C语言编程与实践40-UNIX 全局跳转:setjmp 与 longjmp 函数的使用与注意事项
java·c语言·unix
春风霓裳3 小时前
maven-setting配置
java·maven
小蒜学长3 小时前
springboot二手儿童绘本交易系统设计与实现(代码+数据库+LW)
java·开发语言·spring boot·后端
岁岁岁平安3 小时前
分布式系统相关概念(单体、集群、分布式、分布式集群、微服务)
分布式·微服务
眠りたいです4 小时前
基于脚手架微服务的视频点播系统-脚手架开发部分-brpc中间件介绍与使用及二次封装
c++·微服务·中间件·rpc·架构·brpc
wangwangmoon_light4 小时前
0.0 编码基础模板
java·数据结构·算法
Terio_my5 小时前
Spring Boot 热部署配置与自定义排除项
java·spring boot·后端