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- ...
随机推荐
- 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口
目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...
- 单链表(LinkedList)
与数组相似,链表也是一种线性数据结构.这里有一个例子: 正如你所看到的,链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起. 链表有两种类型:单链表和双链表 ...
- 14 Nginx访问日志自动按天切割
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin LOG_DIR=/usr/loc ...
- 11、ssh自动化脚本编写
11.1.如何一键自动化安装50台规模集群网站搭建: 1.自动化思路: kickstart无人值守安装linux系统(自动创建用户.密码.优化): 分发机上创建秘钥对.批量发走公钥(expect): ...
- 一款好用的CRM系统为何很难被企业找到?
如果您想要照明,买个灯具就能解决问题:如果您想要沟通,买个手机就能立刻打起电话:如果您要购买好用的CRM系统,那就没有这么简单了,无论是选型过程还是使用结果都十分复杂.做为想要使用CRM的潜在用户,您 ...
- CentOS-yum安装Nginx
查看系统版本 $ cat /etc/redhat-release Nginx 不在默认的 yum 源中,使用官网的 yum 源 $ rpm -ivh http://nginx.org/packages ...
- Linux:jar服务部署
1.进入jar包所在文件夹中 2.启动jar,将jar在后台运行,并且记录jar的pid 命令为 : nohup java -jar test.jar (同jar包的配置文件要在jar包同级目录 ...
- Linux查找占用的端口,并杀死进程
我要使用4040端口,但是被其他的程序占用了 1. 查找占用的程序 netstat -apn | grep 4040 最后一项显示的是pid和对应的名称 2. 杀掉对应的进程,彻底杀死进程 kill ...
- linux 中获取进程和kill进程的几种方法
ps: ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. 注意:ps是显示瞬间进程的状态, ...
- linux之软连接 硬链接 link ln
p.p1 { margin: 0; font: 12px "Helvetica Neue"; color: rgba(220, 161, 13, 1) } p.p2 { margi ...