alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.17k stars 12.82k forks source link

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

Closed key1012 closed 6 months ago

key1012 commented 4 years ago

使用配置中心,修改数据后不生效,控制台监听到了修改动作,[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 commented 4 years ago

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

chuntaojun commented 4 years ago

Whether to use spring-cloud

wangshiminwork commented 4 years ago

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

Liesport758 commented 4 years ago

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

1061691343 commented 3 years ago

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

zzx131 commented 3 years ago

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

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

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

mrwlei commented 3 years ago

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

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

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

试了,也不行

mrwlei commented 3 years ago

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 commented 3 years ago

我试过 ,可以的呀在属性上加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.

1061691343 commented 3 years ago

你好,不知道您是如何配置的呀  给不了答复

------------------ 原始邮件 ------------------ 发件人: "zzx131"<notifications@github.com>; 发送时间: 2020年12月7日(星期一) 下午3:23 收件人: "alibaba/nacos"<nacos@noreply.github.com>; 抄送: "蔡呈杰"<1061691343@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [alibaba/nacos] nacos 配置中心刷新数据 不生效 (#1960)

这个问题解决了吗?今天遇到这个问题,没有重新加载配置中心的配置,版本spring-cloud-starter-alibaba-nacos-config -2.2.1 Listener listener = listenerMap.computeIfAbsent(key, lst -> new AbstractSharedListener() { @override 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)); } } });

— 您收到评论是因为您对此发表了评论。 直接回复此电子邮件,在GitHub上查看,或取消订阅。

mrwlei commented 3 years ago

我试过 ,可以的呀在属性上加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 commented 3 years ago

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.

mrwlei commented 3 years ago

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 commented 3 years ago

ok

------------------ 原始邮件 ------------------ 发件人: "王雷"<notifications@github.com>; 发送时间: 2020年12月14日(星期一) 下午2:29 收件人: "alibaba/nacos"<nacos@noreply.github.com>; 抄送: "蔡呈杰"<1061691343@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [alibaba/nacos] nacos 配置中心刷新数据 不生效 (#1960)

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.

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

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

huwb13329901681 commented 3 years ago

@mrwlei 你用的哪个版本?

1061691343 commented 3 years ago

1.2.1

------------------ 原始邮件 ------------------ 发件人: "alibaba/nacos" <notifications@github.com>; 发送时间: 2020年12月16日(星期三) 下午2:19 收件人: "alibaba/nacos"<nacos@noreply.github.com>; 抄送: "蔡呈杰"<1061691343@qq.com>;"Comment"<comment@noreply.github.com>; 主题: Re: [alibaba/nacos] nacos 配置中心刷新数据 不生效 (#1960)

@mrwlei 你用的哪个版本?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

chenmu5241 commented 3 years ago

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

yueyihan commented 3 years ago

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

mfkwfc commented 3 years ago

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

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

WTroy commented 3 years ago

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

610983691 commented 3 years ago

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


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

xiaosan666 commented 3 years ago

你的配置要是在共享配置文件,要如下方式启用刷新,参考: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 commented 3 years ago

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

azi03 commented 3 years ago

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

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

llooper-dev commented 3 years ago

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

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

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

JackCaptain1015 commented 3 years ago

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

HeyWeCome commented 2 years ago

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

1061691343 commented 2 years ago

谢谢你的来信蔡呈杰已经收到辛苦了~

xiaohaibaba commented 2 years ago

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

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

HelloJava404 commented 2 years ago

使用配置中心,修改数据后不生效,控制台监听到了修改动作,[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 commented 2 years ago

谢谢你的来信蔡呈杰已经收到辛苦了~

sake23 commented 1 year ago

我用的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 commented 1 year ago

谢谢你的来信蔡呈杰已经收到辛苦了~

jkxbest commented 1 year ago

目前应该是需要再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 commented 1 year ago

谢谢你的来信蔡呈杰已经收到辛苦了~

codingsoda commented 1 year ago

目前应该是需要再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 commented 1 year ago

谢谢你的来信蔡呈杰已经收到辛苦了~

kgzw8218 commented 7 months ago

我用的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 commented 7 months ago

谢谢你的来信蔡呈杰已经收到辛苦了~

miaoyinjun commented 7 months ago

目前应该是需要再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 commented 7 months ago

谢谢你的来信蔡呈杰已经收到辛苦了~

qbmiller commented 6 months ago

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

KomachiSion commented 6 months ago

回答总结:

  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 commented 6 months ago

谢谢你的来信蔡呈杰已经收到辛苦了~