一、Archaius是什么?
Archaius是一个提供获取可以运行时动态改变的属性的API的Java类库
二、Archaius特性
1、动态属性
- 可以使用简洁的代码去动态获取类型特定的属性
- 可以对某个属性发生修改之后创建callback
DynamicIntProperty prop =
DynamicPropertyFactory.getInstance().getIntProperty("myProperty", DEFAULT_VALUE);
// prop.get() may change value at runtime
myMethod(prop.get());
// 创建callback
prop.addCallback(new Runnable() {
public void run() {
// ...
}
});
2、循环读取配置源数据信息
- DynamicPropertyFactory将会按照一定的间隔(默认1分钟)取获取类路径下或者通过参数指定的url的配置,实现动态更新
- 我们可以自己实现相关的接口来自定义自己的数据源、定时加载更新逻辑等
PolledConfigurationSource source = createMyOwnSource();
AbstractPollingScheduler scheduler = createMyOwnScheduler();
ConfigurationManager.install(new DynamicConfiguration(source, scheduler));
3、完成对部分配置源的实现
- 完成JDBC、DynamoDB、zk等数据源的实现,开箱即用
- 可以自定义自己的配置源,参考:github.com/Netflix/arc…
4、配置和发布上下文管理
- com.netflix.config.ConfigurationManager是用来管理全系统配置的管理器
- 它是archaius的核心处理类,后面的自定义配置源加载也需要经过这个类
5、高吞吐且线程安全的获取配置
6、支持scala
三、简易混合配置架构
- archaius核心概念是混合配置,能够维护一到多个配置源,诸如JDBC、REST、本地配置、zk、容器配置等
- 当某个配置在多个配置源中都存在时,那么最终生效的配置优先级取决于下图的层级顺序;比如你在数据库中配置了属性A(value=1),config.properties中也配置属性A(value=2),那么从下图的层级关系看,最终生效的是value=1的配置
四、使用Archaius配置
1、引入依赖
<dependency>
<groupId>com.netflix.archaius</groupId>
<artifactId>archaius-core</artifactId>
<version>0.6.0</version>
</dependency>
2、使用本地文件作为配置源
- 默认archaius可以会使用类路径下的config.properties文件作为配置源
- 当然jar中的config.properties也会作为配置源,不过这个优先级比当前工程类路径的低
- 我们可以在类路径下配置config.properties,通过5中的获取配置方式来动态获取配置
3、使用外部的URLS作为配置源
可以使用如下配置来指定配置源,他的优先级高于config.properties
-Darchaius.configurationSource.additionalUrls=http://myserver/properties
4、archaius的默认配置参数
- archaius.configurationSource.defaultFileName,默认值config.properties;表示本地配置文件名
- archaius.fixedDelayPollingScheduler.initialDelayMills,默认30000;表示初始化时拉取配置的延迟时间
- archaius.fixedDelayPollingScheduler.delayMills。默认60000;表示定时拉取配置的间隔时间
- 可以通过系统参数对这三个参数进行重置
5、使用配置
// 推荐使用这种方式获取属性
System.out.println(DynamicPropertyFactory.getInstance()
.getStringProperty("test.archaius", "fail").get());
System.out.println(DynamicProperty.getInstance("test.archaius").getString());
6、配置管理器的总结
- ConfigurationManager时archaius用来管理所有配置的管理器,包括管理系统、dynamicUrl、环境、自定的配置源(例如zk、db等)等的配置
- ConfigurationManager是通过实例化一个CompositionConfiguration来进行管理的
- 我们可以通过ConfigurationManager.getConfigInstance()获取一个系统全局的配置,包含了所有层级的配置数据
- 具体源码就不做分析