Netflix archaius动态配置工具使用
来源:互联网 发布:skype聊天软件下载 编辑:程序博客网 时间:2024/06/08 09:53
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(一)概述
- Netflix开源类库archaius(一)概述
- Netflix Archaius 分布式配置管理依赖构件
- [curator] Netflix Curator 使用
- [curator] Netflix Curator 使用
- Netflix Curator 使用 Zookeeper 编程
- Netflix:使用大数据驱动业务决策
- [curator] Netflix Curator 使用 Zookeeper 编程
- Netflix Curator 使用(Zookeeper 简化客户端)
- Hystrix(Netflix)使用教程-1
- Netflix on Linux:如何在Linux上使用Netflix以及为什么在Linux上使用Netflix怎么就这么难
- autoconfig配置工具使用
- 如何使用客户端配置工具
- PLSQL 配置工具的使用
- linux网卡配置工具使用
- 使用ASM工具动态修改类
- pkgconfig工具使用 linux动态库加载
- DTO – 服务实现中的核心数据
- MariaDB yum安装
- Kotlin设计模式
- intellji idea 创建java文件
- logback日志
- Netflix archaius动态配置工具使用
- ajax请求过程
- roketmq单机版本
- Effective C++第三章-资源管理-2
- <NOIP> 21 . P1914 小书童——密码
- Mybatis配置文件报错“元素类型为 "configuration" 的内容必须匹配……”
- 注意测试spring项目
- 字符串反转的几种方式
- AS开发中出现Error(二)——Java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or