SpringCloud的Archaius - 动态管理属性配置
参考链接: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 - 动态管理属性配置相关推荐
- python修改nginx配置文件_zookeeper 动态管理nginx配置
假设我们有一个场景,所有服务器共享同一份配置文件,我们肯定不可能单独手动维护每台服务器,这时可以利用zookeeper的配置管理功能. 环境:python + nginx + zookeeper 目的 ...
- 网络存储技术Windows server 2012 (项目二 动态磁盘的配置与管理)
网络存储技术Windows server 2012 (项目二 基本磁盘的配置与管理) 目录 前言 一.项目背景 二.项目实训题 1.项目1 2.项目2 3.项目3 前言 网络存储技术,是以互联网为载体 ...
- 利用程序动态管理Web.config文件的配置
Web.config文件假设有如下需要管理的配置信息: <appSettings> <add key="Sitetitle" value="站点名 ...
- SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心
文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...
- SpringBoot 定时任务动态管理通用解决方案
欢迎关注方志朋的博客,回复"666"获面试宝典 一.功能说明 SpringBoot的定时任务的加强工具,实现对SpringBoot原生的定时任务进行动态管理,完全兼容原生@Sche ...
- hive动态分区shell_Hive动态分区 参数配置及语法
Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...
- Linux网络属性配置相关命令
Linux网络属性配置相关命令: 前言: Linux属性配置可以分为两类.一类通过命令配置,另一类通过修改配置文件配置. Linux属性配置的相关命令可以分为三大类: 一.ifcfg命令家族:①ifc ...
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
转:https://blog.csdn.net/forezp/article/details/70037291 最新版本: 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spr ...
- Visual Studio属性配置中使用宏
在学习C语言的时候,我们曾经遇到过一个宏的概念.宏的作用机理本质上是宏的展开,C语言中的宏的用法也有很多种(水其实很深...),不过从感觉上来讲,人们大致上会在以下的场景中,利用宏来解决一些窘境:一是 ...
最新文章
- luci L大_“大众”果然没失望,空间大,颜值暴增
- linux下I2C驱动发送IO时序,Linux I2C 驱动阅读的碰到的一些网上没有提到的东西
- 盘点大数据的十大发展方向,Scale-out将成主流
- 小鱼比可爱(洛谷-P1428)
- php 获取 get变量,php – 在Laravel中获取GET“?”变量
- vue 同步加载_vue axios同步请求解决方案
- C++ tbb unsafe_erase() 并发访问 解决方案
- 开启本地网易云api接口后端服务器
- 兄弟,学点AI吗?2知识的确定性系统
- 数电课设——基于74系列芯片搭建的交通灯控制系统电路
- 根据百度日历获取当年所有天数,以及判断今天是周几 以及是是节假日或者工作日,阴历阳历
- Windows 关闭错误报告/弹窗
- 【HAVENT原创】CentOS 下 nginx 配置和启动
- 微信-H5界面跳转至公众号关注界面问题
- Android程序员二本出身、逆袭网易、一路孤独、一路狂欢,源码解读-别再说你不知道HashMap原理
- 条码打印机打印出白纸怎么回事
- Download Example
- 俄语计算机考研,研友分享:俄语考研91分的经验体会
- 关于STC单片机的远程升级
- BCG Application Management
热门文章
- android ListView几个比较特别的属性
- USACO3.22Stringsobits
- IOS时间和秒的转换
- ADO.NET与Sql Server和Access的连接
- 近期 AI 领域招聘招生信息汇总
- UCSB微软提出VIOLET,用Masked Visual-token Modeling进行端到端的视频语言学习!性能SOTA...
- 百度飞桨开源Open Images Dataset V5目标检测比赛最好单模型MSF-DET
- linux逻辑分区被删除了怎么办,找到了linux分区顺序错乱修复方法
- 收藏 | 12个神经网络可视化工具!
- 收藏 | 9 个技巧让你的 PyTorch 模型训练变得飞快!