概述
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动态配置工具使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复