怎么样可以实时知道配置文件变更了|Java 开发实战

356 阅读2分钟

本文正在参加「Java主题月 - Java 开发实战」,详情查看 活动链接

开篇

这是我参与更文挑战的第5天,活动详情查看: 更文挑战

现在很多的Java开发者都使用过Spring Cloud,那么在使用注册中心组件的时候,是不是都有自动服务发现,配置更新的功能。其底层的逻辑就是定时从配置中心去读取数据,并且更新内存中相关配置,并且通知监听的监听器更新内容。

那么接下来就要介绍一个好用的框架archaius, 如果你有以下问题或需求:

  1. 从配置中获取最新配置,加载到本地内存。
  2. 配置中心的配置发生变化,动态更新本地内存中的。
  3. 配置中心的配置发生变换,接收并做出响应。
  4. 动态变更数据源等。

使用前须知

  1. 默认读取的配置文件路径为 resource目录下的config.properties文件, 可用通过系统参数archaius.configurationSource.additionalUrls=clssspath:application.properties追加要读取的文件
  2. 默认定时读取配置内容为60000ms,即一分钟,可以通过系统参数archaius.fixedDelayPollingScheduler.delayMills=100修改
  3. 改动了配置文件的内容,需要重新编译,因为程序运行时读取的是编译代码的目录,不是开发代码的目录

image.png

实例演示

  1. 引入依赖jar
<dependency>
    <groupId>com.netflix.archaius</groupId>
    <artifactId>archaius-core</artifactId>
    <version>0.7.7</version>
</dependency>
  1. 调用相关api
// 获取对象实例
DynamicPropertyFactory instance = DynamicPropertyFactory.getInstance();
// 第一个参数是属性名,第二个是默认值
DynamicStringProperty nameProperty = instance.getStringProperty("myname", "default");
// 添加回调监听
nameProperty.addCallback(() -> System.out.println("name属性值发生变化:"));

// 2秒钟读一次
while (true) {
    System.out.println(nameProperty.get());
    TimeUnit.SECONDS.sleep(2);
}

看效果

image.png image.png

这篇算是简单介绍下好用的框架和使用,如果想了解原理的可以自己阅读源码或者叫我安排~,主要是怕写太多你们看不完,就直接以使用为主,毕竟真正想了解底层是需要花费挺多时间的。

参考

Netflix/archaius

关注+点赞👍收藏❤️不迷路

文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!