参考链接:http://www.th7.cn/Program/java/201608/919853.shtml

一、Archaius是什么?

Archaius用于动态管理属性配置文件。

参考自Getting-Started

* 引入项目中*
<dependency>
<groupId>com.netflix.archaius</groupId>
<artifactId>archaius-core</artifactId>
<version>0.6.0</version>
</dependency>

使用本地配置文件作为配置源
默认的,Archaius将查找classpath下名为config.properties文件并读取,这个配置文件可以包含在一个jar包的根路径下。另外,你可以使用属性archaius.configurationSource.additionalUrls来包含url形式的文件,多个文件用逗号分割。

使用下面的API在程序中得到你需要的属性

// create a property whose value is type long and use 1000 as the default
// if the property is not defined
DynamicLongProperty timeToWait = DynamicPropertyFactory.getInstance().getLongProperty("lock.waitTime", 1000);

// ...
ReentrantLock lock = ...;

// ...
lock.tryLock(timeToWait.get(), TimeUnit.MILLISECONDS); // timeToWait.get() returns up-to-date value of the property

默认的:Archaius会每分钟去重新加载下属性配置,多属性文件时,最后读到的属性会覆盖前面相同的属性

列出我们可以修改的一些系统属性

Operation HTTP action Notes
archaius.configurationSource.defaultFileName 指定Archaius默认加载的配置源属性文件名,默认:classpath:config.properties config.properties
archaius.fixedDelayPollingScheduler.initialDelayMills 延迟加载,默认30秒 30000
archaius.fixedDelayPollingScheduler.delayMills 两次属性读取时间间隔,默认1分钟 60000

高级使用:自定义configuration source和polling scheduler,即自己设计动态属性配置方案。

二、一个简单的例子

1. 获取配置源
public class DynamicConfigurationSource implements PolledConfigurationSource { @Override public PollResult poll(boolean initial,Object checkPoint) throws Exception { Map<String,Object> map = new HashMap<>(); map.put("test",UUID.randomUUID().toString()); return PollResult.createFull(map); } }
2. 定义调度器
AbstractPollingScheduler scheduler = new FixedDelayPollingScheduler(2000,2000,false);
3. 定义动态配置
DynamicConfiguration configuration = new DynamicConfiguration(source,scheduler);
4.简单单元测试
    @org.testng.annotations.Testpublic void testArchaius() throws Exception { PolledConfigurationSource source = new DynamicConfigurationSource(); AbstractPollingScheduler scheduler = new FixedDelayPollingScheduler(2000,2000,false); DynamicConfiguration configuration = new DynamicConfiguration(source,scheduler); ConfigurationManager.install(configuration); final DynamicStringProperty stringProperty = DynamicPropertyFactory.getInstance().getStringProperty("test","nodata"); Helpers.subscribePrint(Observable.interval(1,TimeUnit.SECONDS).take(20).doOnNext(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println(stringProperty.get()); } }),"test"); TimeUnit.MINUTES.sleep(1); }

实现

1. 启动轮询任务
public synchronized void startPolling(PolledConfigurationSource source, AbstractPollingScheduler scheduler) { this.scheduler = scheduler; this.source = source; init(source, scheduler); scheduler.startPolling(source, this); }
2.轮询的Runnable和初始化:实现是一致的
    PollResult result = null;try {result = source.poll(false,getNextCheckPoint(checkPoint));checkPoint = result.getCheckPoint();fireEvent(EventType.POLL_SUCCESS, result, null);} catch (Throwable e) { log.error("Error getting result from polling source", e); fireEvent(EventType.POLL_FAILURE, null, e); return; } try { populateProperties(result, config); } catch (Throwable e) { log.error("Error occured applying properties", e); } 

注意到,会调用source.poll方法,即PolledConfigurationSource的polled,我们实现的数据源接口,可以自定义数据源(jdbc,文件,scm等)

转载于:https://www.cnblogs.com/lexiaofei/p/7169483.html

SpringCloud的Archaius - 动态管理属性配置相关推荐

  1. python修改nginx配置文件_zookeeper 动态管理nginx配置

    假设我们有一个场景,所有服务器共享同一份配置文件,我们肯定不可能单独手动维护每台服务器,这时可以利用zookeeper的配置管理功能. 环境:python + nginx + zookeeper 目的 ...

  2. 网络存储技术Windows server 2012 (项目二 动态磁盘的配置与管理)

    网络存储技术Windows server 2012 (项目二 基本磁盘的配置与管理) 目录 前言 一.项目背景 二.项目实训题 1.项目1 2.项目2 3.项目3 前言 网络存储技术,是以互联网为载体 ...

  3. 利用程序动态管理Web.config文件的配置

    Web.config文件假设有如下需要管理的配置信息: <appSettings>    <add key="Sitetitle" value="站点名 ...

  4. SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心

    文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...

  5. SpringBoot 定时任务动态管理通用解决方案

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.功能说明 SpringBoot的定时任务的加强工具,实现对SpringBoot原生的定时任务进行动态管理,完全兼容原生@Sche ...

  6. hive动态分区shell_Hive动态分区 参数配置及语法

    Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...

  7. Linux网络属性配置相关命令

    Linux网络属性配置相关命令: 前言: Linux属性配置可以分为两类.一类通过命令配置,另一类通过修改配置文件配置. Linux属性配置的相关命令可以分为三大类: 一.ifcfg命令家族:①ifc ...

  8. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    转:https://blog.csdn.net/forezp/article/details/70037291 最新版本: 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spr ...

  9. Visual Studio属性配置中使用宏

    在学习C语言的时候,我们曾经遇到过一个宏的概念.宏的作用机理本质上是宏的展开,C语言中的宏的用法也有很多种(水其实很深...),不过从感觉上来讲,人们大致上会在以下的场景中,利用宏来解决一些窘境:一是 ...

最新文章

  1. luci L大_“大众”果然没失望,空间大,颜值暴增
  2. linux下I2C驱动发送IO时序,Linux I2C 驱动阅读的碰到的一些网上没有提到的东西
  3. 盘点大数据的十大发展方向,Scale-out将成主流
  4. 小鱼比可爱(洛谷-P1428)
  5. php 获取 get变量,php – 在Laravel中获取GET“?”变量
  6. vue 同步加载_vue axios同步请求解决方案
  7. C++ tbb unsafe_erase() 并发访问 解决方案
  8. 开启本地网易云api接口后端服务器
  9. 兄弟,学点AI吗?2知识的确定性系统
  10. 数电课设——基于74系列芯片搭建的交通灯控制系统电路
  11. 根据百度日历获取当年所有天数,以及判断今天是周几 以及是是节假日或者工作日,阴历阳历
  12. Windows 关闭错误报告/弹窗
  13. 【HAVENT原创】CentOS 下 nginx 配置和启动
  14. 微信-H5界面跳转至公众号关注界面问题
  15. Android程序员二本出身、逆袭网易、一路孤独、一路狂欢,源码解读-别再说你不知道HashMap原理
  16. 条码打印机打印出白纸怎么回事
  17. Download Example
  18. 俄语计算机考研,研友分享:俄语考研91分的经验体会
  19. 关于STC单片机的远程升级
  20. BCG Application Management

热门文章

  1. android ListView几个比较特别的属性
  2. USACO3.22Stringsobits
  3. IOS时间和秒的转换
  4. ADO.NET与Sql Server和Access的连接
  5. 近期 AI 领域招聘招生信息汇总
  6. UCSB微软提出VIOLET,用Masked Visual-token Modeling进行端到端的视频语言学习!性能SOTA...
  7. 百度飞桨开源Open Images Dataset V5目标检测比赛最好单模型MSF-DET
  8. linux逻辑分区被删除了怎么办,找到了linux分区顺序错乱修复方法
  9. 收藏 | 12个神经网络可视化工具!
  10. 收藏 | 9 个技巧让你的 PyTorch 模型训练变得飞快!