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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq语音红包生僻字怎么办 生僻字上不了户口怎么办 7岁儿童结巴怎么办 小孩咳喘有痰怎么办 都说我不爱说话怎么办 宝宝突然结巴了怎么办 淘宝客户不理人怎么办 遇到不说话客户怎么办 同学群没人聊怎么办 群里没人说话怎么办 儿童说话声音沙哑怎么办 孩子不和外人说话怎么办 同学退群该怎么办 宝宝睡觉枕头湿怎么办 一个多月的小宝宝便秘怎么办 小宝宝便秘拉屎困难怎么办 一岁小宝宝便秘怎么办 客户不听我说话怎么办 微信上客户不理怎么办 小宝宝母乳不够吃怎么办 小宝宝吃母乳拉肚子怎么办 母乳小宝宝吃奶吃不了怎么办 婴儿感冒吐奶怎么办 小孩感冒吐奶怎么办 小孩吐奶怎么办月子 新生儿一直吐奶怎么办 宝宝50天吐奶厉害怎么办 小儿吐奶厉害怎么办 宝宝一直便秘了怎么办 误建了微信群聊怎么办 新生儿大口吐奶怎么办 宝宝喝了就吐奶怎么办 婴儿顿顿吐奶怎么办 说话着急就结巴怎么办 幼儿舌头长泡怎么办 一着急说话结巴怎么办 幼儿舌头又溃疡怎么办 3儿童说话结巴怎么办 孩子小舌头短怎么办? 6岁讲话不清楚怎么办 三岁宝宝结巴怎么办