@RefreshScope和@NacosConfigListener正确的用法大全和不生效原因解析

news/发布时间2024/5/15 21:59:35

问题引入

使用过Nacos的同学都知道,当我们修改nacos配置后,应用后端是可以感知到配置信息变化了。比如当我在Nacos配置页面修改日志级别后,再去看应用日志输出,日志立马就改成了最新配置的输出级别。
但是,我们在properties或者yaml自定义的参数怎么可以实现这种自动更新呢?且往下看

局部配置参数自动更新

SrpingCloud参考

在引用了个别配置参数的类上使用@RefreshScope注解,这个注解是springcloud的。路径:org.springframework.cloud.context.config.annotation.RefreshScope
这样当配置文件对应的参数修改后,你就可以在类中使用最新的参数值了。举例如下:

  • yaml参数配置:
    在这里插入图片描述
  • 代码中使用对应参数
    在这里插入图片描述
  • Nacos官方例子:
    在这里插入图片描述
Srping-Boot参考

Nacos官方例子:

  • 启动类注解:
    在这里插入图片描述
  • 配置参数使用的这个注解哦:
    在这里插入图片描述
Srping参考
  • pom依赖:
    在这里插入图片描述
  • 配置类要加注解:
    在这里插入图片描述
  • 配置参数加注解:
    在这里插入图片描述
    官方配置代码库地址:
    https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-cloud-example/nacos-spring-cloud-config-example/pom.xml

主动监听参数更新

上面的配置都是针对单个配置参数实现自动更新的设置方法。这种设置的缺点是,更新后的参数在被代码使用时,才能感知是否生发变化了。如果想主动去监听参数变化,并且在参数变化后,第一是时间处理业务逻辑。就需要我们配置成主动监听参数变化了。具体操作如下:

Spring-Cloud实践版
  • 1)pom依赖
    我的springCloud版本是2.1.1.RELEASE,nacos版本是1.1.4,所以下面的依赖用的版本比较旧。
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>0.3.6</version></dependency>
  • 2)启动类或者配置类加注解
    启动类和配置类二选一即可:
    1)启动类加注解:
    在这里插入图片描述
    2)配置类注解:
    在这里插入图片描述
  • 3)监听方法加注解 @NacosConfigListener
import com.alibaba.nacos.api.config.ConfigType;
import com.alibaba.nacos.api.config.annotation.NacosConfigListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.util.Properties;/*** Description:nacos监听** @author LiuLei* @version 1.0* @date 2024/2/20 16:01*/
@Slf4j
//@Configuration
@Component
public class DataNacosListenConfig {// 1)String类型的方式接收的yaml格式不方便解析
//    @NacosConfigListener(dataId = "dta-tirs-data.yaml", type = ConfigType.YAML)
//    public void onReceived(String value) throws InterruptedException {
//        log.info("onReceived : {}", value);
//    }// 2)改用Properties接收,方便获取想要拿的参数@NacosConfigListener(dataId = "dta-tirs-data.yaml", type = ConfigType.YAML)public void onReceived(Properties value) {log.info("onReceived(Properties) : {}", value.getProperty("task.keep.life_cycle_policy_name"));}
}

测试效果,肉眼可见哦。
在这里插入图片描述

官方“栗子”

有兴趣的同学点开自己看吧。
https://nacos.io/zh-cn/docs/nacos-spring.html

https://github.com/nacos-group/nacos-spring-project/blob/master/nacos-spring-samples/nacos-spring-webmvc-sample/src/main/java/com/alibaba/nacos/samples/spring/listener/SimpleNacosConfigListener.java

答疑解惑

刚开始没看到官网有例子,各种百度,头都快百度烂了,死活使用@NacosConfigListener注解方法后,不生效!
1)网上有的类注释是@Configuration有的是@Component,其实最后都可以的。
2)nacos-spring-context 包必须必须得有,否则,@EnableNacosConfig 或者 @EnableNacos 你【压根】就没法使用哦!
这也是我刚开始没有成功的关键因素!
3)启动类或者配置文件得有@EnableNacosConfig 或者@EnableNacos用法在上面截图有。
这也是我只写了@NacosConfigListener,改了八十遍配置文件,死活监听不到变化的原因之一!
4)就是要注意版本,spring-cloud和naocs版本得匹配,nacos-spring-context的版本也得和spring-cloud版本匹配,否则部分方法或者参数不一致,会报错的。这个我也遇到了。最后就是降低版本解决的。

看帖子踩过的坑,我来填平!!!

1)必须依赖nacos-spring-context包,其实官网对应页面一开始就说了。看得懂,就明明白白,不会走弯路了。
https://nacos.io/zh-cn/docs/nacos-spring.html
在这里插入图片描述
2)

@EnableNacos是一个模块驱动的注解,它支持 Nacos Spring 的所有功能,包括服务发现和配置管理。它等于
@EnableNacosDiscovery 加上 @EnableNacosConfig,可以单独配置并在不同场景中使用。

官网原话,见上图。
然而,很多帖子,只给出了加@NacosConfigListener注解的方法,其他的都没有给出。生手,只能两眼一抹黑,瞎转悠了。

经验总结

找资料,帖子可能最容易看懂的,然而,帖子完整性、正确性,都不如官网。
所以,当我们遇到帖子解决不了的问题时,还是第一时间去看官网!看官网!看官网!一遍找不到,就多找几遍。慢慢找。
但凡,你能想到的功能,官网一般都会提供样例!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/XJkI/2441.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

C++ Primer 笔记(总结,摘要,概括)——第4章 表达式

目录 4.1 基础 4.1.1 基本概念 4.1.2 优先级与结合律 4.1.3 求值顺序 4.2 算术运算符 4.3 逻辑和关系运算符 4.4 赋值运算符 4.5 递增和递减运算符 4.6 成员访问运算符 4.7 条件运算符 4.8 位运算符 4.9 sizeof运算符 4.10 逗号运算符 4.11 类型转换 4.11.1 算数转换…

Docker再学习 - 实战

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

机器视觉在OCR字符检测的应用

在产品质量 检测过程中&#xff0c;对于字符、条码等标识信息的识别、读取、检测是非常重要的一部分&#xff0c;比如在食品饮料包装检测中&#xff0c;生产日期 、保质期 、生产批号 、条码等字符信息是产品管理和追溯必不可缺的&#xff0c;因此利用机器视觉技术进行OCR字符采…

flink类加载器原理与隔离(flink jar包冲突)

flink类加载器原理与隔离 Java 类加载器解决类冲突基本思想什么是 Classpath?Jar 包中的类什么时候被加载?哪些行为会触发类的加载?什么是双亲委派机制?如何打破双亲委派机制? Flink 类加载隔离的方案Flink是如何避免类泄露的?Flink 卸载用户代码中动态加载的类Flink 卸载…

Mysql第二关之存储引擎

简介 所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎&#xff0c;还有常见的索引。 Mysql有两种常见的存储引擎&#xff0c;MyISAM和Innodb&#xff0c;它们各有优劣&#xff0c;经过多次优化和迭代&#xff0c;…

【华为 OD 机考 C 卷 D卷】11月份华为od机试 C 卷 D卷 已来 ,如何刷题?

提示 2023年11月份&#xff0c;华为官方已经将 华为OD机考&#xff1a;OD统一考试&#xff08;A卷 / B卷&#xff09;切换到 OD统一考试&#xff08;C卷&#xff09;和 OD统一考试&#xff08;D卷&#xff09; 。 目前在考C卷&#xff0c;经过两个月的收集整理&#xff0c;C…

YOLOv7(目标检测)入门教程详解---检测,推理,训练

目录 一.前言 二.yolov7源码下载 三.detect&#xff08;检测&#xff09; 四.Train&#xff08;训练&#xff09; 数据准备&#xff1a; labellmg: 配置训练的相关文件 配置数据集文件 正式训练&#xff1a; 推理&#xff1a; 推理效果&#xff1a; 五.总结 一.前言 …

【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操…

如何将OpenAI Sora生成的普通AI视频转化为Vision Pro的空间视频,沉浸式体验

【基于AI的Vision Pro空间视频】工作流:这个工作流程用于将2D视频转换为适用于 Vision Pro的Spatial视频: 1、使用Deep3D将2D视频转换为3D SBS: 使用Deep3D工具将2D视频转换为3D SBS格式: 转换例子:Prediction– lucataco/deep3d – Replicatehttps://replicate.com/…

Shiro-11-web 介绍

配置 将Shiro集成到任何web应用程序的最简单方法是在web.xml中配置一个Servlet ContextListener和过滤器&#xff0c;该Servlet了解如何读取Shiro的INI配置。 INI配置格式本身的大部分是在配置页面的INI部分中定义的&#xff0c;但是我们将在这里介绍一些额外的特定于web的部…

js设计模式:建造者模式

作用: 将众多功能独立封装,然后用一个大类将其全部收纳,形成一个完整的功能 这个是很常见的设计模式 示例: function render(h){}function h(){}function $mount(dom){console.log(dom,绑定的根节点)console.log(this,this是vue实例)}function use(plugin){}function $attr(…

编程笔记 Golang基础 007 第一个程序:hello world 使用Goland

编程笔记 Golang基础 007 第一个程序&#xff1a;hello world 使用Goland 步骤1&#xff1a;启动GoLand并创建新项目步骤2&#xff1a;创建主包和主函数步骤3&#xff1a;运行程序小结 开始在Goland环境中编程go语言代码啦。 步骤1&#xff1a;启动GoLand并创建新项目 打开GoL…

相机图像质量研究(32)常见问题总结:图像处理对成像的影响--振铃效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

vue3-组合式 API

什么是组合式 API&#xff1f; 组合式 API (Composition API) 是一系列 API 的集合&#xff0c;使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语&#xff0c;涵盖了以下方面的 API&#xff1a; 响应式 API&#xff1a;例如 ref() 和 reactive()&a…

Aster实现一台电脑当两台使——副屏搭配键鼠

前言&#xff1a;笔者每年回家&#xff0c;都面临着想要和小伙伴一起玩游戏&#xff0c;但小伙伴没有电脑/只有低配电脑的问题。与此同时&#xff0c;笔者自身的电脑是高配置的电脑&#xff0c;因此笔者想到&#xff0c;能否在自己的电脑上运行游戏&#xff0c;在小伙伴的电脑上…

用HTML5 Canvas创造视觉盛宴——动态彩色线条效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- 声明文档类型为XHTML 1.0 Transitional -…

计算机网络-局域网和城域网(二)

1.局域网互联设备&#xff1a; 2层网桥&#xff08;生成树、源路由&#xff09;、3层交换机、路由器。网桥要求3层以上协议相同&#xff0c;1、2层协议不同可互联。 2.生成树网桥&#xff1a; 又叫透明网桥&#xff0c;IEEE802.1d&#xff0c;生成树算法。基本思想是在网桥之…

什么是HTTP代理,socks5代理?它们的区别是什么?

什么是HTTP代理&#xff1f; HTTP代理是一种常见的网络代理方式&#xff0c;它通过在客户端和服务器之间建立一个中间层&#xff0c;将客户端的请求转发给服务器&#xff0c;并将服务器的响应返回给客户端。HTTP代理通常用于访问受限制的网站&#xff0c;或者在网络中隐藏客户…

小迪安全25WEB 攻防-通用漏洞SQL 读写注入MYSQLMSSQLPostgreSQL

#知识点&#xff1a; 1、SQL 注入-MYSQL 数据库 2、SQL 注入-MSSQL(SQL server) 数据库 3、SQL 注入-PostgreSQL 数据库 #详细点&#xff1a; Access 无高权限注入点-只能猜解&#xff0c;还是暴力猜解 因为access的数据库是独立存在的&#xff0c;不存在统一管理 …

Docker再学习 - 阿里加速配置篇

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…
推荐文章