archaius(2) 配置源
上一节讲到,archaius实现动态配置的核心就是定时去配置中心拉去配置内容,接下来几接就来看一下archaius内部具体是如何实现的。
首先我们来了解一下配置源,什么是配置源呢,archaius内部配置的来源即配置源。archaius抽象了两种配置源,一种是主动拉取方式获取配置,一种是被动监听方式获取配置。
所谓主动拉去就是配置源需要主动从目标位置获取配置;二被动监听则是注册一个监听器,当目标位置配置变换收接受变化的配置信息。
我们先来看一下类图结构:

PolledConfigurationSource定义了主动拉取配置的方法,并且支持断点加载。PollResult是拉取的结果数据。
public PollResult poll(boolean initial, Object checkPoint) throws Exception;
initial是否是初次获取,checkPoint上次获取的检查点。
archaius实现了JDBCConfigurationSource和URLConfigurationSource两种配置源分别从数据库和指定url中加载配置信息。
JDBCConfigurationSource 需要用户指定数据源,查询语句,key的列名,value的列名。
public JDBCConfigurationSource(DataSource datasource, String query,
String keyColumnName, String valueColumnName) {
this.datasource = datasource;
this.query = query;
this.keyColumnName = keyColumnName;
this.valueColumnName = valueColumnName;
}
根据数据源、查询语句、key的列名、value的列名从数据库中获取相应的配置,然后封装成PollResult返回,实际上JDBCConfigurationSource并没有实现断点加载,每一次获取都是获取所有数据。
Map<String, Object> map = new HashMap<String, Object>();
...
conn = getConnection();
pstmt = conn.prepareStatement(query.toString());
rs = pstmt.executeQuery();
while (rs.next()) {
String key = (String) rs.getObject(keyColumnName);
Object value = rs.getObject(valueColumnName);
map.put(key, value);
} ...
return PollResult.createFull(map);
}
URLConfigurationSource需要指定配置文件的url(如果没有指定默认读取类路径下config.properties文件)。URLConfigurationSource也没有实现断点加载,每一次获取都是获取所有数据。
public PollResult poll(boolean initial, Object checkPoint) throws IOException {
if (configUrls == null || configUrls.length == 0) {
return PollResult.createFull(null);
}
Map<String, Object> map = new HashMap<String, Object>();
for (URL url: configUrls) {
InputStream fin = url.openStream();
Properties props = ConfigurationUtils.loadPropertiesFromInputStream(fin);
for (Entry<Object, Object> entry: props.entrySet()) {
map.put((String) entry.getKey(), entry.getValue());
}
}
return PollResult.createFull(map);
}
监听配置源
WatchedConfigurationSource定义了监听配置源,当配置发生变化时,调用这些监听器,archaius内部并没有提供实现。
public interface WatchedConfigurationSource {
/**增加监听器
*/
public void addUpdateListener(WatchedUpdateListener l);
/**删除监听器
*/
public void removeUpdateListener(WatchedUpdateListener l);
/**获取最新的所有配置信息
*/
public Map<String, Object> getCurrentData() throws Exception;
}
WatchedUpdateListener定义了监听器,
public interface WatchedUpdateListener {
public void updateConfiguration(WatchedUpdateResult result);
}
WatchedUpdateResult里面是改动的配置信息。
public class WatchedUpdateResult {
/**分别存储完整的配置信息,新增的配置,改变的配置,删除的配置 */
protected final Map<String, Object> complete, added, changed, deleted;
protected final boolean incremental;
/**完整的配置信息*/
public static WatchedUpdateResult createFull(Map<String, Object> complete) {
return new WatchedUpdateResult(complete);
}
archaius(2) 配置源的更多相关文章
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...
- .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- 深入了解三种针对文件(JSON、XML与INI)的配置源
深入了解三种针对文件(JSON.XML与INI)的配置源 物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonCon ...
- SpringBoot自动配置源码调试
之前对SpringBoot的自动配置原理进行了较为详细的介绍(https://www.cnblogs.com/stm32stm32/p/10560933.html),接下来就对自动配置进行源码调试,探 ...
- CentOS配置源
一.源列表 aliyun源 #各系统版本repo文件对应的下载操作 CentOS wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.al ...
- .Net Core 自定义配置源从配置中心读取配置
配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...
- [ASP.NET Core 3框架揭秘] 配置[7]:多样化的配置源[中篇]
物理文件是我们最常用到的原始配置载体,而最佳的配置文件格式主要有三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]
.NET Core采用的这个全新的配置模型的一个主要的特点就是对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源.如果采用物理文件作为配置源,我们可以选择 ...
- SpringBoot Profile使用详解及配置源码解析
在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...
随机推荐
- 第3篇 Scrum 冲刺博客(专✌️团队)
目录 一.站立式会议 1.1 会议照片 1.2 成员完成情况 二.项目燃尽图 三.成员代码/文档签入记录 3.1 代码签入 3.2 Issue链接 3.3 CodeReview代码规范文档 四.最新项 ...
- instanceof判断问题
有时候我们根据instanceof来判断对象的数据类型 但是 用instanceof判断基本数据类型时 会不靠谱 例如 let str = '123' let str1 = new String(&q ...
- .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用
环境:之前一直是使用serverStack.Redis的客服端,今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExch ...
- 关于Junit4 和 Junit5.4
1. Junit5.4 主要是用于Maven框架 , 对普通类的测试是不可以的. 如这个, junit4可以, junit5.4不可以. 2. Junit不可以使用 static 静态方法. 关 ...
- 漏洞重温之sql注入(五)
漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...
- 经典DP动规 0-1背包问题 二维与一维
先上代码 b站讲解视频 灯神讲背包 #include <iostream> #include <cstring> #include <algorithm> usin ...
- 好看的css渐变颜色大全网址
60个渐变颜色 https://webkul.github.io/coolhue/ 60个非常有用的CSS代码片段 https://baijiahao.baidu.com/s?id=160278735 ...
- android开发之动画的详解 整理资料 Android开发程序小冰整理
/** * 作者:David Zheng on 2015/11/7 15:38 * * 网站:http://www.93sec.cc * * 微博:http://weibo.com/mcxiaob ...
- oeasy教您玩转linux010103我在那pwd
我在哪pwd 回忆上次内容 我们上次列出了关于发行版详细信息文件的位置 ls /etc/*release 其中 ls是命令的名字,意味着list列表 /是整个文件系统的根root /etc是根目录下的 ...
- 解决ASP.NET上传文件大小限制------(转载人家的博客很好用,略作修改)
解决ASP.NET上传文件大小限制 (2012-06-26 15:18:01) 转载▼ 标签: it 第一种方法,主要适用于IIS6.0版本 一.修改配置Web.Config文件中的httpRun ...