SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)

qq交流群: 812321371

微信交流群: MercyYao

简介

配置中心有原生的 SpringCloud Config 、国内开源的 阿里 Nacos、携程 Apollo 等。

都是配置热加载的基础上增加了其他的功能。

配置中心具有配置热加载,修改配置 -> 推送到程序 -> 执行配置更新。

而获取配置更新的具体内容,这些组件都没有做到(SpringCloud ConfigNacos, Apollo待验证 )。如:获取变化的配置 test 更新前为 123 ,更新后为 111

SpringCloud ConfigNacosApollo待验证 配置更新都是将整个配置文件推送给服务进行配置对比结果进行更新。这个阶段用户无法从程序中获取更新的内容。

为了实现这个扩展功能点,更新结果可以让程序感知。

在这个阶段用户通过code可以实现配置监听, 监听到某个配置变化做其他操作等。

示例: 获取到推送配置变化, 感知到 test 发生变化, 做更新同步数据操作等等。

感知结果集如:

{
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
},
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
}
}

功能使用

添加依赖

ps: 实际version版本请使用最新版

最新版本:

<dependency>
<groupId>com.purgeteam</groupId>
<artifactId>dynamic-config-spring-boot-starter</artifactId>
<version>0.1.0.RELEASE</version>
</dependency>

当然实际情况要结合添加动态配置依赖包 SpringCloud ConfigNacosApollo

dynamic-config-spring-boot-starter 模块不包含以上依赖, 需要自行添加。

@EnableDynamicConfigEvent

简介: 开启这个特性注解,具备配置推送更新监听能力。

启动类添加 @EnableDynamicConfigEvent 注解开启配置变化监听功能。

@EnableDynamicConfigEvent
@SpringBootApplication
public class DynamicConfigSpringBootApplication { public static void main(String[] args) {
SpringApplication.run(DynamicConfigSpringBootApplication.class, args);
} }

编写事件接收器

创建 NacosListener(名称随意) 实现 ApplicationListener<ActionConfigEvent>#onApplicationEvent 方法

@Slf4j
@Component
public class NacosListener implements ApplicationListener<ActionConfigEvent> { @Override
public void onApplicationEvent(ActionConfigEvent event) {
log.info("接收事件");
log.info(event.getPropertyMap().toString());
}
}

NacosListener#onApplicationEvent 方法里获取目标值, 作相应的逻辑处理。

ActionConfigEvent event:

public class ActionConfigEvent extends ApplicationEvent {

    // 事件说明
private String eventDesc; // 更新变化结果集
private Map<String, HashMap> propertyMap;
...
}

ActionConfigEvent 主要包含 Map<String, HashMap> propertyMap;, 从这里可以获取更新变化结果, propertyMap结构如下:

{
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
},
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
}
}

更新配置演示

ps: 示例为 Nacos 其它配置中心无差别。

原始配置:

test.age=18
user.name=purgeyao

修改配置:

# test.age 将18更新为19
test.age=19
user.name=purgeyao

NacosListener#onApplicationEvent 方法加入端点调试观察 ActionConfigEvent 对象参数。

更新的 test.age 已经被记录在了 ActionConfigEvent.propertyMap 里了, 从 18 更新为 19。

控制台打印:

2019-10-17 10:44:09.221  INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener    : 接收事件
2019-10-17 10:45:19.752 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : {test.age={before=18, after=19}}

总结

上述功能基于 NacosSpringCloud Config 或基于 SpringCloud Config 之上构建的配置中心都可以使用, 其他配置中心待验证。

qq交流群: 812321371

微信交流群: MercyYao

示例代码地址:dynamic-config-spring-boot

作者GitHub:

Purgeyao 欢迎关注

本文由博客一文多发平台 OpenWrite 发布!

SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)的更多相关文章

  1. 详解vuex结合localstorage动态监听storage的变化

    这篇文章主要介绍了详解vuex结合localstorage动态监听storage的变化,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 需求:不同组件间共用同一数据,当一个 ...

  2. JDK 之 NIO 2 WatchService、WatchKey(监控文件变化)

    JDK 之 NIO 2 WatchService.WatchKey(监控文件变化) JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html ...

  3. 使用inotify实现linux系统下的目录变化监控

    近期,有个项目须要及时删除Nginx服务生成的缓存文件,因为不是非常了解Nginx缓存生成的策略,在网上也沒有细致找,经过大家讨论,终于希望引入liunx的inotify功能,监控某个liunx文件夹 ...

  4. 动手实现 Redux(二):抽离 store 和监控数据变化

    上一节 的我们有了 appState 和 dispatch: let appState = { title: { text: 'React.js 小书', color: 'red', }, conte ...

  5. JS-改变页面的颜色之变化核心-获取六位的随机数

    前言:从JS-改变页面的颜色(一).JS-改变页面的颜色(二).JS-改变页面的颜色(三)三个简单的小白例,我们可以轻而易举的看到起变化的核心是——十六进制颜色值的获取方式,所以,我们这里总结一下获取 ...

  6. Python监控文件变化:watchdog

    Python监控文件变化有两种库:pyinotify和watchdog.pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装.也就是说,watchdog跨平台. ...

  7. mac 监控文件变化并重启php

    自己撸一个框架,需要监控代码变化 安装fswatch brew install fswatch shell重启PHP脚本reload.sh #!/bin/sh do ps -ef | grep php ...

  8. Springboot定时任务实现动态配置Cron参数(从外部数据库获取)

    https://blog.csdn.net/qq_35992900/article/details/80429245 我们主要讲解它的动态配置使用方法. 在刚开始使用的时候,我们更改一个任务的执行时间 ...

  9. 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

    [SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...

随机推荐

  1. Java网络编程 -- Netty入门

    Netty简介 Netty是一个高性能,高可扩展性的异步事件驱动的网络应用程序框架,它极大的简化了TCP和UDP客户端和服务器端网络开发.它是一个NIO框架,对Java NIO进行了良好的封装.作为一 ...

  2. JavaScript漫谈之理解类型操作符typeof

    在本文中,将简述JavaScript类型系统和数据类型,以及如何使用typeof操作符执行类型检查. 还讲解了使用typeof操作符进行某些数据类型检查是不完善的,并介绍其他几种类型检查的方法. 更多 ...

  3. 从原理层面掌握@InitBinder的使用【享学Spring MVC】

    每篇一句 大魔王张怡宁:女儿,这堆金牌你拿去玩吧,但我的银牌不能给你玩.你要想玩银牌就去找你王浩叔叔吧,他那银牌多 前言 为了讲述好Spring MVC最为复杂的数据绑定这块,我前面可谓是做足了功课, ...

  4. Nuget打包类库及引用

    什么是nuget 适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建.共享和使用有用的代码. 通常,此类代码捆绑到"包"中,其中包含编译的代码(如 DL ...

  5. Net基础篇_学习笔记_第十一天_面向对象(关键字new和this)

     new关键字 new:用来创建对象的.Person zsPerson=new Person();new帮助我们做了3件事儿:1).在内存中开辟一块空间2).在开辟的空间中创建对象3).调用对象的构造 ...

  6. 如何在spingboot项目中自定义自己的配置

    在实际开发中,为了方便我们常常会考虑把配置文件的某一类配置映射到配置类上,方便spring容器加载,实现方法如下: 1. 书写配置文件信息:书写某一类特定字段开头的配置信息,例如在yml配置文件中可以 ...

  7. 浮动后的 <li> 如何在 <ul> 中居中显示?

    百度了许久都没有满意的解决方案,现在终于搞定了. 其实,只要 ul 的父元素 css 样式设了 text-align: center; 然后 ul 设了 display: inline-block; ...

  8. 深入浅出Mysql索引的那些事儿

    文章来源:公众号:猿人谷 一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优 ...

  9. 【读书笔记】C++ primer 5th 从入门到自闭(一)

    这几天看了C++ primer 5th的一二章,有很多收获,但是有的地方因为翻译的问题也搞得理解起来颇为难受啊啊啊啊.尤其是const限定符,在C语言并没有这么多复杂的语法,在C++里面语法细节就多的 ...

  10. 21 (OC) 数据持久化

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...