微服务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());
}
}控制台输出:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Security+MyBatis实现从数据库动态查询权限的完整实现方案
文章详细介绍了SpringSecurity从数据库动态查询权限的实现方案,包括核心接口、数据库表设计、MyBatis查询权限、UserDetailsService实现、SpringSecurity配置、Controller使用及常见问题优化等内容,该方案生产可用,灵活且遵循SpringSecurity接口设计标准2026-04-04
Maven中plugins和pluginManagement区别小结
pluginManagement是表示插件声明,plugins就是直接引入一个plugin,本文主要介绍了Maven中plugins和pluginManagement区别小结,具有一定的参考价值,感兴趣的可以了解一下2024-06-06
Spring Boot集成Druid出现异常报错的原因及解决
Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。本文讲述了Spring Boot集成Druid项目中discard long time none received connection异常的解决方法,出现此问题的同学可以参考下2021-05-05
解决Kibana报错[security_exception] current license&nbs
ElasticSearch 5.1.1因安全许可证过期报错,解决方法:官网申请新许可证,下载JSON文件并上传至服务器,执行代码时切换root权限,配置host为服务器IP,端口9200,替换原license文件2025-07-07
Springboot整合Shiro使用yml文件管理Urls方式
这篇文章主要介绍了Springboot整合Shiro使用yml文件管理Urls方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2026-03-03
解决Intellij IDEA运行报Command line is too long的问题
这篇文章主要介绍了解决Intellij IDEA运行报Command line is too long的问题,本文通过两种方案给大家详细介绍,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-05-05


最新评论