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

控制台输出:

相关推荐
Lakers-2412 分钟前
1987年5月29日晚上19-21点出生性格、运势和命运
java
AI人工智能+电脑小能手17 分钟前
【大白话说Java面试题 第194题】【08_Kafka篇】第10题:简述 Kafka 的 Rebalance 机制?
java·kafka·消费者组·rebalance·分布式消息队列
__log22 分钟前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
spider_xcxc23 分钟前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
祐樹26 分钟前
1987年5月23日下午15-17点出生性格、运势和命运
java
zhangjw3426 分钟前
第35篇:Spring Boot入门:自动配置+快速搭建,简化企业开发
java·spring boot·后端
geovindu42 分钟前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
NWU_LK1 小时前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库
一只小菜鸡..1 小时前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
叶总没有会1 小时前
3.2 构建AI智能体项目扩展知识
java·数据库·人工智能·spring·ai