Nacos 自动更新配置不生效问题
版本
Nacos 1.4.1
SpringCloud 2020.0.3
解决方案
bootstrap.properties 增加应用名配置即可
spring.application.name=service-product
(导致失效的原因可能有多种,如果上述解决方案无效,可以评论私信我具体版本)
自动更新原理
其实是借助spring重新加载配置的能力,当Nacos发现配置文件MD5不一致时,新增刷新事件,触发SpringCloud重新加载逻辑。
com.alibaba.nacos.api.config.listener.AbstractSharedListener#innerReceive 发布Refesh事件
public void innerReceive(String dataId, String group,
String configInfo) {
refreshCountIncrement();
nacosRefreshHistory.addRefreshRecord(dataId, group, configInfo);
// todo feature: support single refresh for listening
applicationContext.publishEvent(
new RefreshEvent(this, null, "Refresh Nacos config"));
if (log.isDebugEnabled()) {
log.debug(String.format(
"Refresh Nacos config group=%s,dataId=%s,configInfo=%s",
group, dataId, configInfo));
}
}
org.springframework.cloud.endpoint.event.RefreshEventListener#handle(org.springframework.cloud.endpoint.event.RefreshEvent) SpringApplication调用刷新入口
public void handle(RefreshEvent event) {
if (this.ready.get()) { // don't handle events before app is ready
log.debug("Event received " + event.getEventDesc());
Set<String> keys = this.refresh.refresh();
log.info("Refresh keys changed: " + keys);
}
}
org.springframework.boot.SpringApplication#applyInitializers 获取初始化类 如下
org.springframework.cloud.bootstrap.BootstrapApplicationListener$AncestorInitializer@1491c218
org.springframework.cloud.bootstrap.BootstrapApplicationListener$DelegatingEnvironmentDecryptApplicationInitializer@1a06e969
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration@1d443173 //Nacos的配置加载locate注册在这
org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer@6a729f71
org.springframework.boot.context.config.DelegatingApplicationContextInitializer@57ced7d3
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer@6a2234f6
org.springframework.boot.context.ContextIdApplicationContextInitializer@7a9fa37c
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer@35cd7790
org.springframework.boot.rsocket.context.RSocketPortInfoApplicationContextInitializer@141c4eb5
org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer@6fe25d44
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener@68618787
com.alibaba.cloud.nacos.client.NacosPropertySourceLocator#locate 这里获取应用名 只能获取到bootstrap中配置的
原因是springCloud正常启动时会先加载application.yml,而刷新配置时不会
String dataIdPrefix = nacosConfigProperties.getPrefix();
if (StringUtils.isEmpty(dataIdPrefix)) {
dataIdPrefix = name;
}
if (StringUtils.isEmpty(dataIdPrefix)) {
dataIdPrefix = env.getProperty("spring.application.name");
}
com.alibaba.nacos.api.config.ConfigService#getConfig 这个是真正获取配置的接口
Nacos 自动更新配置不生效问题的更多相关文章
- Spring Cloud Bus 自动更新配置
---恢复内容开始--- Spring Cloud Config 结合 Spring Cloud bus 实现 git 仓库提交配置文件 触发消息队列 应用自动更新配置 1. config 服务端 添 ...
- SpringBoot整合Nacos自动刷新配置
目的 Nacos作为SpringBoot服务的注册中心和配置中心. 在NacosServer中修改配置文件,在SpringBoot不重启的情况下,获取到修改的内容. 本例将在配置文件中配置一个 cml ...
- 带你入门SpringCloud 之 通过SpringCloud Bus 自动更新配置
前言 在<带你入门SpringCloud统一配置 | SpringCloud Config>中通过 SpringCloud Config 完成了统一配置基础环境搭建,但是并没有实现配置修改 ...
- webpack-dev-server的自动更新配置
一.背景 测试发布一个项目,修改jsx中的内容,页面不自动更新. 每次必须执行npm run build:然后执行npm run start. 脚本如下: "scripts": { ...
- Spring Cloud Bus实现自动更新配置
一.概述 1. 配置环境 版本:Spring Boot版本2.0.3.RELEASE,Spring Cloud版本Finchley.SR1,RabbitMQ 3.7.7 说明:本文章是在https:/ ...
- spring cloud学习(六) 配置中心-自动更新
上一篇学习了spring cloud config的基本使用,但发现有个问题,就是每次更改配置后,都需要重启服务才能更新配置,这样肯定是不行的.在上网查资料了解后,spring cloud支持通过AM ...
- SVN的基本原理 配置自动更新WEB服务器
SVN的基本原理 配置自动更新WEB服务器 最近有个小项目,需要用SVN来进行版本控制.项目组的同僚有8个人,大家都在本地开发,然后提交到服务器——服务器就是其中一台机器.专门安排一个测试员来进行项目 ...
- Spring Cloud 整合 nacos 实现动态配置中心
上一篇文章讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能.本文主要讲解Spring Cloud 整合nacos实 ...
- linux小白成长之路4————centos7配置自动更新安装安全补丁
[内容指引] 安装yum-cron; 修改配置:nano: 手工启动服务: 将服务设置为开机自动启动. 为保证linux系统的安全性以及稳定性,可以使用yum-cron服务自动更新: 1.安装yum- ...
随机推荐
- Linux命令(磁盘的卸载与挂载)
一.光盘挂载与卸载: 1.将光盘CD-ROM(hdc)安装到文件系统的/mnt/cdrom目录下的命令是 C . A mount /mnt/cdrom B mount /mnt/cdrom /dev ...
- electron-ipc通信性能分析
electron-ipc通信性能分析 electron的主进程和渲染进程间通信方案 ipc通信 借助外部存储通信(通过ipc通知其它进程去读取) 方案描述 ipc通信 使用 主进程 ==> 渲染 ...
- Golang控制子gorutine退出,并阻塞等待所有子gorutine全部退出
Golang控制子gorutine退出,并阻塞等待所有子gorutine全部退出 需求 程序有时需要自动重启或者重新初始化一些功能,就需要退出之前的所有子gorutine,并且要等待所有子goruti ...
- 高性能的Redis之对象底层实现原理详解
对象 在前面的数个章节里, 我们陆续介绍了 Redis 用到的所有主要数据结构, 比如简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合, 等等. Redis 并没有直接使用这些数据结构来实 ...
- lvm脚本
# 2 SWAP 20GB SWAP # 3 /usr/sap 50GB /usr/sap # 4 Shared 1 x 512 GiB /hana/shared # 5.6 Log 2 x 300 ...
- 02 Linux系统发送告警邮件
# yum install mailx -y # vim /etc/mail.rc set from=hyjy2504164765@163.com smtp=smtp.163.com set smtp ...
- Docker单机网络下
前言 Docker系列文章: 此篇是Docker系列的第七篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 ...
- SpringBoot:Sqlite3+SpringBoot2.1.3+Mybatis-Puls整合项目
应公司要求完成sqlite3数据库的增改查小功能,特此记录一下. 1.建造项目 结构如下 因为是提供给前端调用所以做了接口. 2.Pom依赖文件 下面是这个项目所依赖的jar包. <parent ...
- 在idea的控制台中中文显示为乱码
显示乱码的原因不一定相同 我目前解决方法: -Dfile.encoding=UTF-8
- 关于vector.size()的一些常见错误总结
1. 问题引入 通过查看[https://www.cplusplus.com/reference/vector/vector/] 的vector.size()说明,即 member type defi ...