Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos 配置中心刷新数据 不生效 #1960

Closed
key1012 opened this issue Oct 23, 2019 · 44 comments
Closed

nacos 配置中心刷新数据 不生效 #1960

key1012 opened this issue Oct 23, 2019 · 44 comments

Comments

@key1012
Copy link

key1012 commented Oct 23, 2019

使用配置中心,修改数据后不生效,控制台监听到了修改动作,[notify-listener] time cost=1ms in ClientWorker, dataId=

Using the configuration center, the data modification does not take effect. The console monitors the modification action, [notify listener] time cost = 1ms in clientworker, dataid.=

@nkorange
Copy link
Collaborator

请看下{user.home}/logs/nacos/config.log里面是否有收到推送?

@chuntaojun
Copy link
Collaborator

Whether to use spring-cloud

@wangshiminwork
Copy link

我也是这样的问题 控制台打印了推送的新的配置信息,但是没有办法实现自动刷新 springcloud工程 已添加@RefreshScope注解

@Liesport758
Copy link

这个问题大家是如何解决的

@1061691343
Copy link

我控制台也收到了刷新的信息 但是不生效
Refresh keys changed: [mybatis-plus.mapper-locations, spring.datasource.password]

@zzx131
Copy link

zzx131 commented Dec 7, 2020

参考
将配置映射到实体对象,上面添加@RefreshScope 可以实现动态刷新

@value注入的配置文件无法刷新。

@RefreshScope
@ConfigurationProperties(prefix = "user")
@component
@DaTa
public class User {
private String name;
}

@mrwlei
Copy link

mrwlei commented Dec 11, 2020

参考
将配置映射到实体对象,上面添加@RefreshScope 可以实现动态刷新

@value注入的配置文件无法刷新。

@RefreshScope
@ConfigurationProperties(prefix = "user")
@component
@DaTa
public class User {
private String name;
}

试了,也不行

@mrwlei
Copy link

mrwlei commented Dec 11, 2020

image
image
当我nacos控制台修改年龄后,日志已打印出最新修改的值,但是原来注入到spring的值,没有刷新
18:19:58.375 [com.alibaba.nacos.client.Worker.longPolling.fixed-nacos.ehking.com-e00d9625-39fa-43ea-8d54-d29bb1181078] INFO c.a.n.c.c.i.ClientWorker - [parseUpdateDataIdResponse,422] - [fixed-nacos.ehking.com-e00d9625-39fa-43ea-8d54-d29bb1181078] [polling-resp] config changed. dataId=mmtax.properties, group=DEFAULT_GROUP, tenant=e00d9625-39fa-43ea-8d54-d29bb1181078
18:19:58.455 [com.alibaba.nacos.client.Worker.longPolling.fixed-nacos.ehking.com-e00d9625-39fa-43ea-8d54-d29bb1181078] INFO c.a.n.c.c.i.ClientWorker - [run,526] - [fixed-nacos.ehking.com-e00d9625-39fa-43ea-8d54-d29bb1181078] [data-received] dataId=mmtax.properties, group=DEFAULT_GROUP, tenant=e00d9625-39fa-43ea-8d54-d29bb1181078, md5=6cdc1dcf17373dc1b07b972e7d657f60, content=user.name=wanglei
user.age=19

@1061691343
Copy link

1061691343 commented Dec 12, 2020 via email

@1061691343
Copy link

1061691343 commented Dec 12, 2020 via email

@mrwlei
Copy link

mrwlei commented Dec 14, 2020

我试过 ,可以的呀在属性上加value("${****}"),在该属性的类上加注解@RefreshScope 把配置信息写在nacos配置中心就好啦,之后改变值就会自动刷新,不需要重启项目

------------------ 原始邮件 ------------------ 发件人: "王雷"<notifications@github.com>; 发送时间: 2020年12月11日(星期五) 晚上6:11 收件人: "alibaba/nacos"<nacos@noreply.github.com>; 抄送: "蔡呈杰"<1061691343@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [alibaba/nacos] nacos 配置中心刷新数据 不生效 (#1960) 参考 将配置映射到实体对象,上面添加@RefreshScope 可以实现动态刷新 用@value注入的配置文件无法刷新。 @RefreshScope @ConfigurationProperties(prefix = "user") @component @DaTa public class User { private String name; } 试了,也不行 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

你用的nacos是哪个版本的?

@1061691343
Copy link

1061691343 commented Dec 14, 2020 via email

@mrwlei
Copy link

mrwlei commented Dec 14, 2020

1061691343   直接加qq聊吧  邮件发的很慢

------------------ 原始邮件 ------------------ 发件人: "王雷"<notifications@github.com>; 发送时间: 2020年12月14日(星期一) 上午9:45 收件人: "alibaba/nacos"<nacos@noreply.github.com>; 抄送: "蔡呈杰"<1061691343@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [alibaba/nacos] nacos 配置中心刷新数据 不生效 (#1960) 我试过 ,可以的呀在属性上加value("${****}"),在该属性的类上加注解@RefreshScope 把配置信息写在nacos配置中心就好啦,之后改变值就会自动刷新,不需要重启项目 … ------------------ 原始邮件 ------------------ 发件人: "王雷"<notifications@github.com>; 发送时间: 2020年12月11日(星期五) 晚上6:11 收件人: "alibaba/nacos"<nacos@noreply.github.com>; 抄送: "蔡呈杰"<1061691343@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [alibaba/nacos] nacos 配置中心刷新数据 不生效 (#1960) 参考 将配置映射到实体对象,上面添加@RefreshScope 可以实现动态刷新 用@value注入的配置文件无法刷新。 @RefreshScope @ConfigurationProperties(prefix = "user") @component @DaTa public class User { private String name; } 试了,也不行 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. 你用的nacos是哪个版本的? — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

换了一个版本,可以了...

@1061691343
Copy link

1061691343 commented Dec 14, 2020 via email

@huwb13329901681
Copy link

@mrwlei 你用的哪个版本?

@1061691343
Copy link

1061691343 commented Dec 16, 2020 via email

@chenmu5241
Copy link

这个好像主要是在用到@value的类上面加上@RefreshScope注解,另外可能是springboot的版本跟nacos-config版本差异大(我springboot2.3.4,nacos-config2.2.3没问题)

@yueyihan
Copy link

yueyihan commented Jan 7, 2021

在ideal里可以生效,但打成jar运行就只能监听到更新事件,但无法生效
o.s.c.e.event.RefreshEventListener : Refresh keys changed: []
springboot2.3.4,nacos-config2.2.3

@mfkwfc
Copy link

mfkwfc commented Jan 19, 2021

spring cloud 版本:2.2.0.RELEASE
nacos 版本:2.2.0.RELEASE

在idea内无法刷新配置中心数据,以jar运行可以正常刷新。

@WTroy
Copy link

WTroy commented Feb 1, 2021

我升级了最新版本 1.4.1 好像是@RefreshScope和@value 必须同时使用的时候才能热加载实时数据。但是以前1.3.0的时候 没有这个限制,不知道是不是又是一个新的bug。如果按照现在这个规矩 两个必须一起用才生效,这也太麻烦了吧!!!

@610983691
Copy link

我升级了最新版本 1.4.1 好像是@RefreshScope和@value 必须同时使用的时候才能热加载实时数据。但是以前1.3.0的时候 没有这个限制,不知道是不是又是一个新的bug。如果按照现在这个规矩 两个必须一起用才生效,这也太麻烦了吧!!!


我也是1.4.1升级后发现这个问题,今天找半天,,。我的代码springcloud版本没做任何改动,推测nacos1.4.1引入的问题?

@xiaosan666
Copy link

你的配置要是在共享配置文件,要如下方式启用刷新,参考:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

cloud:
   nacos:
     config:
       # 配置中心地址
       server-addr: 192.168.88.5:8848
       # 配置文件格式
       file-extension: yaml
       # 共享配置
       shared-configs:
         - data-id : demo-default-${spring.profiles.active}.yaml
           # 让扩展配置刷新
           refresh : true

@chouway
Copy link

chouway commented Apr 14, 2021

今天也有遇到这个情况,不过我解决了。很大概率是因为项目启动后因为某些原因无法完成ApplicationReadyEvent事件,导致了NacosContextRefresher 的监听没法执行ready事件。

@azi03
Copy link

azi03 commented Jun 3, 2021

今天也有遇到这个情况,不过我解决了。很大概率是因为项目启动后因为某些原因无法完成ApplicationReadyEvent事件,导致了NacosContextRefresher 的监听没法执行ready事件。

请问一下您是怎么解决的,谢谢!

@llooper-dev
Copy link

今天也有遇到这个情况,不过我解决了。很大概率是因为项目启动后因为某些原因无法完成ApplicationReadyEvent事件,导致了NacosContextRefresher 的监听没法执行ready事件。

请问一下您是怎么解决的,谢谢!

@EnableConfigurationProperties({xx.class}),添加这个注解在Application类下,就可以动态更新。

@JackCaptain1015
Copy link

我也遇到这问题了。。。无语

@HeyWeCome
Copy link

刚解决这个问题,我是因为bootstrap.properties没起作用,添加相关依赖就可以了。可以看下这篇博客:Nacos配置中心不起作用解决方案

@1061691343
Copy link

1061691343 commented Dec 11, 2021 via email

@xiaohaibaba
Copy link

在ideal里可以生效,但打成jar运行就只能监听到更新事件,但无法生效 o.s.c.e.event.RefreshEventListener : Refresh keys changed: [] springboot2.3.4,nacos-config2.2.3

我遇到的问题和你一样的,有初步怀疑是其他依赖导致的

@HelloJava404
Copy link

HelloJava404 commented May 17, 2022

使用配置中心,修改数据后不生效,控制台监听到了修改动作,[notify-listener] time cost=1ms in ClientWorker, dataId=

Using the configuration center, the data modification does not take effect. The console monitors the modification action, [notify listener] time cost = 1ms in clientworker, dataid.=

bootstrap.yml 配置的 application.name + "." + cloud.nacos.config.file-extension 属性和 nacos 的 Data ID 需要保持一致

spring:
  application:
    # 必须把name属性从application.yml迁移过来,否则无法动态刷新
    name: coupon-customer-serv

  cloud:
    nacos:
      config:
        # prefix: 文件名前缀,默认是spring.application.name
        file-extension: yml

还有就是 @value 和 @RefreshScope 两个注解搭配使用,@RefreshScope 的作用是使用 Nacos 动态刷新的值来替换 Spring Context

Nacos 版本是 1.4.1

@1061691343
Copy link

1061691343 commented May 17, 2022 via email

@sake23
Copy link

sake23 commented Apr 1, 2023

我用的2021.0.5.0版本的(应该对应的是Spring Boot2的最后一个版本),也发现无法自动更新

前提:

我没有用bootstrap.properties,nacos的config配置是写在application.yml里
value的值本地定义在application.properties里,nacos的配置中心里的Data Id是我的application-name,在config里也定义了一模一样的名称,属性名也都一致,我试过把application.properties里的值删掉是可以正常读取nacos上config的值,包括nacos发布新的值{user.home}/logs/nacos/config.log里也确实读到了。所以应该是优先级的问题

解决:

application.yml配置里需要加一个preference: remote的属性

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        #不配这个远程config的优先级就会比本地低,导致config不会刷新
        preference: remote

不知道是从哪个版本开始本地配置的优先级变的更高了,而且关于这个属性我也找不到相关文档。

@1061691343
Copy link

1061691343 commented Apr 1, 2023 via email

@jkxbest
Copy link

jkxbest commented Jul 1, 2023

目前应该是需要再bootstrap.properties中添加spring.application.name,o.s.c.e.event.RefreshEventListener : Refresh keys changed数据才不为空
springboot3.1.1
springcloud2022.0.3
springcloudalibaba2022.0.0.0-RC2
nacos2.2.3

@1061691343
Copy link

1061691343 commented Jul 1, 2023 via email

@codingsoda
Copy link

目前应该是需要再bootstrap.properties中添加spring.application.name,o.s.c.e.event.RefreshEventListener : Refresh keys changed数据才不为空 springboot3.1.1 springcloud2022.0.3 springcloudalibaba2022.0.0.0-RC2 nacos2.2.3

感恩 完美解决

@1061691343
Copy link

1061691343 commented Sep 4, 2023 via email

@kgzw8218
Copy link

我用的2021.0.5.0版本的(应该对应的是Spring Boot2的最后一个版本),也发现无法自动更新

前提:

我没有用bootstrap.properties,nacos的config配置是写在application.yml里 value的值本地定义在application.properties里,nacos的配置中心里的Data Id是我的application-name,在config里也定义了一模一样的名称,属性名也都一致,我试过把application.properties里的值删掉是可以正常读取nacos上config的值,包括nacos发布新的值{user.home}/logs/nacos/config.log里也确实读到了。所以应该是优先级的问题

解决:

application.yml配置里需要加一个preference: remote的属性

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        #不配这个远程config的优先级就会比本地低,导致config不会刷新
        preference: remote

不知道是从哪个版本开始本地配置的优先级变的更高了,而且关于这个属性我也找不到相关文档。

已解决,谢谢哥

@1061691343
Copy link

1061691343 commented Feb 23, 2024 via email

@miaoyinjun
Copy link

目前应该是需要再bootstrap.properties中添加spring.application.name,o.s.c.e.event.RefreshEventListener : Refresh keys changed数据才不为空 springboot3.1.1 springcloud2022.0.3 springcloudalibaba2022.0.0.0-RC2 nacos2.2.3

我遇到的是Refresh keys changed: [],用这个方法解决,谢谢。

@1061691343
Copy link

1061691343 commented Mar 21, 2024 via email

@qbmiller
Copy link

nacos 2.1.1
@ConfigurationProperties 配置对象。 或者直接@value
在配置文件里 跟data-id并列添加 refresh: true 即可实现热更新。
不需要@RefreshScope

@KomachiSion
Copy link
Collaborator

回答总结:

  1. 非spring cloud用户,即spring boot的用户需要使用value和RefreshScope 注解, 因为value是spring boot的参数,只读本地配置,RefreshScope才能通过nacos-spring-boot-starter动态刷新配置
  2. spring cloud用户,需要配置到bootstrap.yaml中, 如果是application.yml中的配置, spring cloud的不同版本行为不同,可以通过spring.cloud.nacos.config.preference=remote提高远程配置优先级

@1061691343
Copy link

1061691343 commented Apr 15, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests