Archaius

Archaius是一个提供获取可以运行时动态改变的属性的APIJava类库,它主要实现为Apache Commons Configuration库的扩展。

Archaius特性

1. 动态属性

  • 可以使用简洁的代码去动态获取类型特定的属性
  • 可以对某个属性发生修改之后创建callback ```java 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`的配置,实现动态更新

我们可以实现相关的接口来自定义数据源、定时加载更新逻辑等
```java
PolledConfigurationSource source = createMyOwnSource();
AbstractPollingScheduler scheduler = createMyOwnScheduler();
ConfigurationManager.install(new DynamicConfiguration(source, scheduler));

3. 完成对部分配置源的实现

  • 完成JDBCDynamoDBZookeeper等数据源的实现,开箱即用
  • 可以自定义配置源,参考:官方文档

4. 配置和发布上下文管理

  • com.netflix.config.ConfigurationManager是用来管理全系统配置的管理器
  • 它是archaius的核心处理类,后面的自定义配置源加载也需要经过这个类

5. 高吞吐且线程安全的获取配置

6. 支持scala

简易混合配置架构

  • archaius核心概念是混合配置,能够维护一到多个配置源,如JDBCREST、本地配置、Zookeeper、容器配置等
  • 当某个配置在多个配置源中都存在时,那么最终生效的配置优先级取决于下图的层级顺序;比如在数据库中配置了属性Avalue=1),config.properties中也配置属性Avalue=2),那么从架构图上看,最终生效的是value=1

架构图: archaius_架构图.png

使用Archaius配置

Maven依赖

<dependency>
    <groupId>com.netflix.archaius</groupId>
    <artifactId>archaius-core</artifactId>
</dependency>

使用本地文件作为配置源

  • 默认archaius可以会使用类路径下的config.properties文件作为配置源
  • jar中的config.properties也会作为配置源,不过这个优先级比当前工程类路径的低
  • 也可以在类路径下配置config.properties,通过获取配置方式来动态获取配置

使用外部的URLS作为配置源

可以使用如下配置来指定配置源,它的优先级高于config.properties

-Darchaius.configurationSource.additionalUrls=http://myserver/properties

archaius的默认配置参数

  • archaius.configurationSource.defaultFileName,默认值config.properties,表示本地配置文件名
  • archaius.fixedDelayPollingScheduler.initialDelayMills,默认30000,表示初始化时拉取配置的延迟时间
  • archaius.fixedDelayPollingScheduler.delayMills,默认60000,表示定时拉取配置的间隔时间

可以通过系统参数对这三个参数进行重置

使用配置

// 推荐使用这种方式获取属性
System.out.println(DynamicPropertyFactory.getInstance()
                .getStringProperty("test.archaius", "fail").get());

System.out.println(DynamicProperty.getInstance("test.archaius").getString());

总结

  • ConfigurationManagerarchaius用来管理所有配置的管理器,包括管理系统、dynamicUrl、环境、自定义的配置源等的配置
  • ConfigurationManager是通过实例化一个CompositionConfiguration来进行管理的
  • 我们可以通过ConfigurationManager.getConfigInstance()获取一个系统全局的配置,包含了所有层级的配置数据

results matching ""

    No results matching ""