微服务Nacos配置动态刷新方式(简易版)附配置
作者:昊坤说不出的梦
这篇文章主要介绍了微服务Nacos配置动态刷新方式(简易版)附配置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
实现方法
环境:Nacos、Java、SpringBoot等
主要是在boostrap.yaml中的data-id属性下配置refresh:true来实现动态更新
配置依赖 + yaml
具体的版本参考官方的说明:官方版本说明
<!--读取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 配置
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 # 命名空间验证效果
配置监听,更新时打印配置到控制台
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());
}
}控制台输出:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
