我是靠谱客的博主 开心画笔,最近开发中收集的这篇文章主要介绍Netflix archaius动态配置工具使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、解决问题和使用场景

很多项目有配置改变了而不需要重启项目这样的需求,比较暴力的解决方法是写一个定时任务轮询去获取配置信息,然后可以全局获取这些实时更新的配置信息。Netflix archaius针对这一使用场景,对数据源的获取、获取策略(主要是定时策略)和获取全局配置信息进行了封装,实现了动态获取配置数据。

2、使用例子

需要完成数据源的获取方式,获取方式可以是任意方式,比如文件、数据库、zk、consul等等。本例子主要是针对文件获取方式,其它方式可以类推。

数据源实现

数据源实现需要继承PolledConfigurationSource中的poll方法,实现如下:

public class FillConfigurationSource implements PolledConfigurationSource {
@Override
public PollResult poll(boolean b, Object o) {
System.out.println("polling.....");
FileInputStream in = null;
try {
in = new FileInputStream("you file path");
Properties properties = new Properties();
properties.load(in);
Set<Object> keys = properties.keySet();
Map<String, Object> map = new HashMap<>();
for (Object k : keys) {
map.put((String) k, properties.get(k));
}
return PollResult.createFull(map);
} catch (IOException e) {
} finally {
if (in != null)
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}

定时策略

archaius定时策略有一个默认实现FixedDelayPollingScheduler,此默认实现有两个配置,分别是启动延时时间(archaius.fixedDelayPollingScheduler.initialDelayMills 默认为30秒)和间隔获取配置时间(archaius.fixedDelayPollingScheduler.delayMills默认为60秒),这些配置的值是通过System.getProperty获取,当然也可以通过System.setProperty设置默认的值。默认实现足以满足大部分的需求,如果想定制定时策略可以实现AbstractPollingScheduler接口的schedule方法,官网的例子如下:

public class MyScheduler extends AbstractPollingScheduler {
// ...
@Override
protected synchronized void schedule(Runnable runnable) {
// schedule the runnable
}
@Override
public void stop() {
// stop the scheduler
}
}

运行

我们来看看运行代码

private void startPolling() {
System.setProperty("archaius.fixedDelayPollingScheduler.initialDelayMills", "1000");
System.setProperty("archaius.fixedDelayPollingScheduler.delayMills", "2000");
PolledConfigurationSource source = new FillConfigurationSource();
AbstractPollingScheduler scheduler = new FixedDelayPollingScheduler();
DynamicConfiguration configuration = new DynamicConfiguration(source, scheduler);
ConfigurationManager.install(configuration);
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000 * 10);
DynamicStringProperty myprop = DynamicPropertyFactory.getInstance().getStringProperty("uttp", "default");
System.out.println("-----vaule:" + myprop.getValue());
} catch (Exception e) {
}
}
}
}).start();
}

开始值文件中uttp的值为s2,当文件中的uttp值改为3时,得到的值也改变了,结果如下

polling…..
—–vaule:s2
polling…..
polling…..
polling…..
polling…..
polling…..
—–vaule:s3

最后

以上就是开心画笔为你收集整理的Netflix archaius动态配置工具使用的全部内容,希望文章能够帮你解决Netflix archaius动态配置工具使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部