nacos的各种类型的配置文件 yml 、json、 Properties、 text 等文件类型 发生变化怎么热更新,实现实时监听nacos配置文件变化

本文用的是 Nacos作为配置中心注册监听器方法 实现热更新 nacos 配置文件
从而不用重启项目

依赖、工具类 这边就不写了

因为项目用的是 Json 类型的配置文件
所以下文 主要是对json文件进行实现
别的文件大同小异
先说扯淡的东西

在这里插入图片描述
在nacos 的配置文件中
dataId 这两种声明 是不一样
虽然打开里面的配置信息都是 json格式
但是 dataId的命名不一样 我理解为 aaa 这种 等于你创建了一个没有后缀的配置文件

下面开始直接上实现代码
第一步 配置文件 :

# nacos 配置文件监听 参数
nacos:listener:dataId:- systemConfig

第二步

package com.init.config.nacos;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;import java.util.List;/*** User:Json* Date: 2024/3/28*  获取 nacos上的文件名**/
@Data
@Configuration
@ConfigurationProperties("nacos.listener")
public  class DataIdConfig {private List<String> dataId;
}

第三步

package com.init.config.nacos;import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.api.constant.CommonConstant;
import com.api.response.nacos.SystemConfigNacos;
import com.init.utils.RedisUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;import javax.annotation.Resource;
import java.util.List;
import java.util.Properties;
import lombok.extern.slf4j.Slf4j;/*** User:Json* Date: 2024/3/28**/
@Slf4j
@Configuration
public class NacosInitConfig {public static final long DEFAULT_TIMEOUT = 30000;private ConfigService configService;@Value("${spring.cloud.nacos.discovery.server-addr:}")public  String NACOS_SERVER_ADDR;@Value("${spring.cloud.nacos.discovery.namespace:}")public  String NACOS_NAMESPACE;@ResourceDataIdConfig nacosDataIdConfig;@Value("${spring.cloud.nacos.discovery.group}")public  String NACOS_ROUTE_GROUP;private static final String systemConfig="systemConfig";private static final String linkLibrary="linkLibrary";public   void nacos(){try {configService = initConfigService();if (configService == null) {log.error("初始化Nacos 失败!");return;}List<String> dataIdList = nacosDataIdConfig.getDataId();for (String dataId : dataIdList) {//                if (dataId.endsWith("yml")) {
//                    configService.addListener(dataId, NACOS_ROUTE_GROUP, new YmlCallListener());
//                }else if (dataId.endsWith("json")) {
//                    configService.addListener(dataId, NACOS_ROUTE_GROUP, new YmlCallListener());
//                }else{
//                    configService.addListener(dataId,NACOS_ROUTE_GROUP, new YmlCallListener());
//                }switch (dataId){case systemConfig:String configInfo = configService.getConfig(dataId, NACOS_ROUTE_GROUP, DEFAULT_TIMEOUT);//   log.info("获取 systemConfig 配置文件:\r\n{}", configInfo);if(StringUtils.isEmpty(configInfo)){break;}SystemConfigNacos systemConfigNacos = JSON.parseObject(configInfo, SystemConfigNacos.class);
//                        System.out.println(systemConfigNacos.getJwtOrgKey());if(!RedisUtils.hasKey(CommonConstant.REDIS_SYSTEM_CONFIG_NACOS_JAVA)){RedisUtils.setString(CommonConstant.REDIS_SYSTEM_CONFIG_NACOS_JAVA,systemConfigNacos,-1);}configService.addListener(dataId,NACOS_ROUTE_GROUP, new JsonCallListener<>(SystemConfigNacos.class));break;case linkLibrary:break;}}} catch (Exception e) {log.error("初始化 配置文件发生错误", e);}}private ConfigService initConfigService() {try {Properties properties = new Properties();properties.setProperty("serverAddr", NACOS_SERVER_ADDR);properties.setProperty("namespace", NACOS_NAMESPACE);return configService = NacosFactory.createConfigService(properties);} catch (Exception e) {log.error("初始化 Nacos 配置文件发生错误", e);return null;}}
}

第四步:
1.

package com.init.config.nacos;import com.alibaba.fastjson.JSON;
import com.api.constant.CommonConstant;
import com.api.response.nacos.SystemConfigNacos;
import com.init.utils.RedisUtils;
import lombok.AllArgsConstructor;
import com.alibaba.nacos.api.config.listener.Listener;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Executor;
/*** User:Json* Date: 2024/3/28**/
@Slf4j
@AllArgsConstructor
public class JsonCallListener<T> implements Listener {private Class<T> instanceClass;@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {// log.info("nacos中的Json数据发生变化了:{}", configInfo);T systemConfigNacos = JSON.parseObject(configInfo, instanceClass);if(RedisUtils.hasKey(CommonConstant.REDIS_SYSTEM_CONFIG_NACOS_JAVA)){RedisUtils.delete(CommonConstant.REDIS_SYSTEM_CONFIG_NACOS_JAVA);}RedisUtils.setString(CommonConstant.REDIS_SYSTEM_CONFIG_NACOS_JAVA,systemConfigNacos,-1);}
}
package com.init.config.nacos;
import com.alibaba.nacos.api.config.listener.Listener;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Executor;
/*** User:Json* Date: 2024/3/28**/
@Slf4j
public class YmlCallListener implements Listener {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {//log.info("Yml配置内容发生更改:{}", configInfo);}
}

最后一步

package com.init.init;import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;import com.api.constant.CommonConstant;
import com.api.response.nacos.SystemConfigNacos;
import com.init.config.nacos.DataIdConfig;
import com.init.config.nacos.JsonCallListener;
import com.init.config.nacos.NacosInitConfig;
import com.init.utils.RedisUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import javax.annotation.Resource;
import java.util.List;
import java.util.Properties;/*** User:Json* Date: 2024/3/22* Spring Boot应用程序启动后执行某些操作* 我用的是这个 启动项  因为 我要redis  * 如果你不需要用redis * 用* @PostConstructprivate void init() 也行 **/
@Component
@Slf4j
@Data
public class NacosInitializeRunner implements CommandLineRunner {@Autowiredprivate NacosInitConfig nacosInitConfig;@Overridepublic void run(String... args) {nacosInitConfig.nacos();}}

启动项目测试

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

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

相关文章

华为流量整形配置

组网需求 如图1所示&#xff0c;企业网内部LAN侧的语音、视频和数据业务通过Switch连接到RouterA的Eth2/0/0上&#xff0c;并通过RouterA的GE3/0/0连接到WAN侧网络。 不同业务的报文在LAN侧使用802.1p优先级进行标识&#xff0c;在RouterA上根据报文的802.1p优先级入队列&…

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数&#xff0c;拷贝构造函数&#xff0c;析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

2024.3.29每日一题

LeetCode 元素和最小的山形三元组 I 题目链接&#xff1a; 题目描述 给你一个下标从 0 开始的整数数组 nums 。 如果下标三元组 (i, j, k) 满足下述全部条件&#xff0c;则认为它是一个 山形三元组 &#xff1a; i < j < knums[i] < nums[j] 且 nums[k] < nu…

Backend - python 连接 操作 PostgreSQL DB(数据库)

目录 一、基础环境 &#xff08;一&#xff09;建立虚拟环境 &#xff08;二&#xff09;安装依赖 二、连接数据库 三、操作数据库 &#xff08;一&#xff09;查询 &#xff08;二&#xff09;单笔更新/插入 &#xff08;三&#xff09;批量更新/插入 &#xff08;四…

Containerd 介绍、安装和使用

Containerd介绍、安装和使用 文章目录 Containerd介绍、安装和使用1.containerd是什么&#xff1f;2.Containerd安装2.1 主机初始化2.1.1 设置ip地址2.1.2 配置镜像源2.1.3 关闭防火墙2.1.4 禁用SELinux2.1.5 禁用swap2.1.6 设置时区 2.2 安装 containerd2.2.1 内核参数调整2.2…

成都某公司笔试题sql

– 1.某公司需要将项目管理清单导入数据库&#xff0c;请建表&#xff0c;清单字段如下:项目编码&#xff0c;项目名称&#xff0c;项目开始时间&#xff0c;项目结束时间&#xff0c;周期(月)&#xff0c;项目金额&#xff0c;客户名称&#xff0c;客户地址&#xff0c;备注。…

【八大排序】一篇文章搞定所有排序

文章目录 1.排序的概念2.常见排序算法的实现2.1 插入排序2.1.1直接插入排序2.1.2希尔排序 2.2选择排序2.2.1直接选择排序:2.2.2堆排序 2.3交换排序2.3.1冒泡排序2.3.2快速排序Hoare法前后指针法挖坑法非递归版本 2.4归并排序递归版本非递归版本 2.5计数排序3.排序的比较 1.排序…

2024年EDM邮件营销群发平台怎么选?

在2024年选择适合的EDM&#xff08;电子邮件直接营销&#xff09;邮件营销群发平台时&#xff0c;需要考虑以下几个关键要素来评估云衔科技以及其他供应商的产品或服务是否符合您的需求&#xff1a; 一、功能完备性&#xff1a; 1、智能自动化&#xff1a;确保云衔科技提供的…

用DataGrip连接hive时报错:User: root is not allowed to impersonate plck5,解决方法

你可以尝试关闭主机校验 修改hive安装目录下conf/hive-site.xml,将hive.server2.enable.doAs设置成false <property><name>hive.server2.enable.doAs</name><value>false</value><description>Setting this property to true will have H…

Gitea 的简单介绍

Gitea 是一个基于 Go 语言开发的自助 Git 服务程序。它是一个轻量级的代码托管系统&#xff0c;类似于 GitHub 或 GitLab&#xff0c;可以让你搭建自己的私有 Git 仓库。通过 Gitea&#xff0c;用户可以创建和管理 Git 仓库、进行代码托管、问题追踪、团队协作等操作。Gitea 支…

JQuery基础

JQuery就是封装了js的常用代码 用起来更加简洁方便 使用jQuery前可去官网下载载入js文件 编写第一个jq代码 $(document).ready(function (){ console.log("Hellw,jQuery!") })ready方法与js中的onload事件类似 不过还是有区别的 js的onload事件是在等待页面所有的…

VUE 简单版虚拟列表

如果列表数据有几千几万条的话&#xff0c;一次渲染出来会导致页面卡顿。除了懒加载和分页加载数据还可以使用虚拟列表来解决这个问题。虚拟列表的高度是整个列表实际的高度&#xff0c;但是实际渲染的只是可视窗口部分的内容&#xff0c;通过滚动时&#xff0c;可视区域内部分…

CSRF,XSS攻击与预防

CSRF CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。 在使用Cookie作为登录标记的系统上&#xff0c;Cookie泄露…

0329 ***

给定一个字符串&#xff0c;请你找出其中不含有重复字符的最长连续子字符串的长度 链接 const lengthOfLongestSubstring function(s) {const arr []let maxl 0for(let i 0;i<s.length;i){console.log(s[i])if(arr.indexOf(s[i]) -1){arr.push(s[i])maxl Math.max(m…

警惕.360勒索病毒:如何预防.360勒索病毒攻击

导言&#xff1a; 在网络安全领域&#xff0c;勒索病毒是一种非常危险的恶意软件&#xff0c;它以其独特的加密方式和高昂的赎金要求&#xff0c;给个人和企业带来了严重的损失。.360勒索病毒便是其中之一&#xff0c;它属于BeijingCrypt勒索病毒家族&#xff0c;具有高度的隐…

office安装和卸载

目录 安装文件下载安装破解卸载 安装文件下载 链接&#xff1a;https://pan.baidu.com/s/1cBRv-NwNOf2pQyd7XBRu6A?pwdabcd 提取码&#xff1a;abcd 提供内容如下: ├── pdf │ ├── Access2007宝典.pdf │ ├── Excel2007宝典.pdf │ ├── Project2007完全掌…

python读取ply文件

ply文件&#xff0c;是"Polygon File Format"的简称&#xff0c;即多边形文件格式。一般可以理解为&#xff0c;一个ply文件表示一个三维图形。 python常见的读取ply文件的方法有两个&#xff1a;plyfile和open3d plyfile读取ply文件&#xff1a; 安装ply: pip inst…

scGRN:人与鼠的GRN平台

基因调控网络GRN是包含转录因子TFs与其下游靶基因之间的调控相互作用的可解释图模型。了解GRN的拓扑结构和动力学是解释疾病病因机制和将相应发现转化为新疗法的基础。单细胞多组学技术的最新进展促使从单细胞转录组学和表观基因组学数据中以前所未有的分辨率推断GRN。在这里&a…

ClickHouse03-小白如何快速搭建ClickHouse集群

普通测试通常使用ClickHouse单节点就可以了&#xff0c;但是生产环境不免需要考虑多活、负载等高可用问题&#xff0c;集群就成了基础需求 ClickHouse在集群的选择上&#xff0c;作者已知的有两种&#xff1a; 使用ZooKeeper作为节点协调的组件&#xff0c;使用ClickHouse-Kee…

红米手机Redmi 不会自动弹出USB调试选项,如何处理?(红米小米均适用)

参考&#xff1a; 红米手机Redmi 不会自动弹出USB调试选项&#xff0c;如何处理&#xff1f;&#xff08;红米小米均适用&#xff09; - 知乎 以红米9A为例&#xff1b; 【设置】菜单进入后&#xff0c;找到【我的设备】&#xff0c; 选择【全部参数】&#xff0c; 对准miui版…