- 属性的最终值取决于包含该属性的最顶层配置(因为是复合配置)。即,如果一个属性存在于多个配置中,则应用程序看到的实际值将是配置层次结构中最顶层插槽中的值,当然这种层次结构是可以配置的。
Archaius的架构设计
Archaius实际上是对Apache Common Configuration Library的一个封装和扩展,提供了一组基于Java的配置API,主要的特性包括:
-
配置可动态调整:动态、类型属性
-
配置支持类型(Int, Long, Boolean等)。
-
高性能和线程安全:高吞吐量和线程安全的配置操作
-
提供一个拉(pulling)配置的框架,可以从配置源动态拉取变更的配置。(一个轮询框架,允许用户获取对配置源的属性更改)
-
支持回调(callback)机制,在配置变更时自动调用。
-
支持JMX MBean,可以通过JConsole查看配置和修改配置。
对于愿意使用基于约定的属性文件位置的应用程序(以及大多数web应用程序),提供开箱即用的复合配置(这是强大功能之一),对于符合配置官网给了一副示例图如下:
Achaius的核心是一个称为**组合配置(Composite Configuration)**的概念,简单可以理解为一个分层级的配置,层级有优先级,高优先级的层级的配置会覆盖低优先级的配置。每一个层级可以从某个配置源获取配置,例如本地配置文件,JDBC数据源,远程REST API等。配置源还可以在运行时动态拉取变更,例如在上图中,持久化数据库配置(Persisted DB Configuration)是指将配置存在关系数据库中,相应的配置源会定期从数据库拉取变更)。配置的最终值由顶级配置决定,例如,如果多个层级都含有某个配置项,那么应用最终见到的值是配置层级中最顶层的值。配置分层的顺序是可以调整的。
通过archaius获取配置值,有两种方式:
- 一种是通过ConfigurationManager获取到配置中心实例,然后通过propName获取配置值,通过ConfigurationManager获取配置
- 另外一种方式是通过DynamicPropertyFactory,获取配置