概述
-
功能强大的配置管理库 可用于从许多不同来源收集配置属性的框架,提供对配置信息的快速及线程安全访问
-
Archaius可以从多个动态源中检索属性、允许属性在运行时动态更改,使系统无需重新启动应用程序即可获得这些变化(异构的属性源,运行时更改等)
功能
- 动态和类型属性
- 在属性改变时调用的回调机制
- 动态配置源(如URL,JDBC和Amazon DynamoDB)的实现
- Spring Boot Actuator或JConsole可以访问的JMX MBean,用于检查和操作属性
- 动态属性验证
添加依赖
用法
- 一旦我们添加了所需的依赖项,我们就能够访问框架管理的属性:
- 默认情况下,它动态管理应用程序类路径中名为config.properties的文件中定义的所有属性。
所以我们将它添加到我们的资源文件夹中,其中包含一些任意属性:
springcloud.archaius.properties.one=one FROM:config.properties
springcloud.archaius.properties.three=three FROM:config.properties
- 指定读取的配置文件
1⃣️ 可以通过 archaius.configurationSource.defaultFileName 指定读取的配置文件 在启动应用程序时将其作为参数传递给vm
2⃣️写在代码本身中
3⃣️ 多个配置文件 指定加载顺序
使用键“@ next = nextFile.properties”指定一个特殊属性来告诉Archaius哪个是应该加载的下一个文件。
- 需要一种在任何特定时刻检查属性值的方法。在这种情况下,我们将创建一个RestController,将值作为JSON响应检索:
修改属性 无需重新启动服务 在一分钟左右之后,对端点的调用应检索出新值
工作原理
-
Archaius是Apache的Commons Configuration库的扩展,添加了一些很好的功能,如动态源的轮询框架,具有高吞吐量和线程安全的实现。
-
然后 spring-cloud-netflix-archaius 库进入,合并所有不同的属性源,并使用这些源自动配置Archaius工具。
Netflix Archaius库
-
它定义了一个复合配置,是可以从不同来源获得的各种配置的集合。
-
其中一些配置源可以支持在运行时轮询更改。Archaius提供接口和一些预定义的实现来配置这些类型的源。
-
源集合是分层的,因此如果属性存在于多个配置中,则最终值将是最顶部插槽中的值。
-
ConfigurationManager处理系统范围的配置和部署上下文。它可以安装最终的复合配置,或检索已安装的复合配置进行修改。
Spring Cloud Archaius库
主要任务是将所有不同的配置源合并为 ConcurrentCompositeConfiguration,并使用ConfigurationManager进行安装 。
库定义源的优先顺序是:
- 上下文中定义的任何Apache公共配置AbstractConfiguration bean
- Autowired Spring ConfigurableEnvironment中定义的所有源代码
- 默认的Archaius源,我们在上面的例子中看到过
- Apache的SystemConfiguration和EnvironmentConfiguration 源
- Spring Cloud库提供的另一个有用功能是定义一个Actuator Endpoint 来监控属性并与之交互。
Archaius支持的配置属性
Archaius考虑类似于config.properties的其他配置文件 ,我们可以定义 archaius.configurationSource.additionalUrls系统属性。
该值被解析为由逗号分隔的URL列表,因此,例如,我们可以在启动应用程序时添加此系统属性:
-Darchaius.configurationSource.additionalUrls="classpath:other-dir/extra.properties,file:///home/user/other-extra.properties"
Archaius将首先读取config.properties文件,然后按指定的顺序读取其他文件。因此,后面文件中定义的属性将优先于先前的属性。
我们可以使用几个其他系统属性来配置Archaius默认配置的各个方面:
- archaius.configurationSource.defaultFileName:类路径中的默认配置文件名
- archaius.fixedDelayPollingScheduler.initialDelayMills:读取配置源之前的初始延迟
- archaius.fixedDelayPollingScheduler.delayMills:两次读取源之间的延迟; 默认值为1分钟
使用spring 添加其他的数据源
-
Spring定义的Composite Configuration中的最高配置是在上下文中定义的 AbstractConfiguration bean。
-
因此,我们需要做的就是使用Archaius提供的一些功能将这个Apache的抽象类的实现添加到我们的Spring Context中,Spring的自动配置会自动将它添加到托管配置属性中。
-
为了简单起见,我们将看到一个示例,我们配置一个类似于默认config.properties的属性文件,但其优先级高于Spring环境和应用程序属性的其余部分:
- 若是jdbc数据源 使用 JDBCConfigurationSource
使用Archaius已经提供的JDBCConfigurationSource,然后我们注册使用新的配置 ConfigurationManager。
执行此操作后,我们可以从数据库中获取任何属性,就像我们对属性文件所做的那样(即使用 DynamicPropertyFactory)。
1⃣️ 测试
2⃣️ 通过JMX将配置注册为MBean
- Archaius提供的另一个非常酷的功能是可以通过JMX 将我们的配置注册为 MBean。
- 我们可以默认设置系统属性 archaius.dynamicPropertyFactory.registerConfigWithJMX = true或使用ConfigJMXManager.registerConfigMbean(config)进行编程。
- 执行此操作后,我们可以通过JConsole连接,不仅可以获取所有属性的值,还可以更新它们并查看它们在Archaius中反映的新值。例如,这将允许我们在运行时更改属性文件中静态定义的属性值,而无需服务器推送。我们可以稍微修改一下ApplicationConfig类来添加一个main方法,该方法将持续运行打印不同属性的值,这样将允许我们在JConsole中使用。
源码地址:
https://gitee.com/pingfanrenbiji/java-samples.git https://gitee.com/pingfanrenbiji/spring-cloud-examples/tree/master/spring-cloud-archaius/simple_config
参考文章
https://www.jianshu.com/p/1e340e931730 https://www.jianshu.com/p/f9d7500920a9
网友评论