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

控制台输出:

相关推荐
cj63411815011 小时前
【MySQL】mysqldump使用方法
java·后端
JIngJaneIL11 小时前
停车场管理|停车预约管理|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·停车场管理系统
杰克尼12 小时前
二分查找为什么总是写错
java·数据结构·算法
半旧夜夏14 小时前
【分布式缓存】Redis持久化和集群部署攻略
java·运维·redis·分布式·缓存
短视频矩阵源码定制14 小时前
矩阵系统源码推荐:技术架构与功能完备性深度解析
java·人工智能·矩阵·架构
Eiceblue14 小时前
使用 Java 将 Excel 工作表转换为 CSV 格式
java·intellij-idea·excel·myeclipse
漂流幻境14 小时前
IntelliJ IDEA的Terminal中执行ping命令时遇到的“No route to host“问题
java·ide·intellij-idea
苹果醋314 小时前
element-ui源码阅读-样式
java·运维·spring boot·mysql·nginx
BUG?不,是彩蛋!14 小时前
IntelliJ IDEA从安装到使用:零基础完整指南
java·ide·intellij-idea
程序员阿鹏14 小时前
56.合并区间
java·数据结构·算法·leetcode