Netflix Archaius提供了一组精巧的功能,可将动态属性加载到应用程序中。
这篇博客文章只是我所了解的Archaius范围的文档,比我在这里所记录的内容要多得多,但这应该提供一个很好的开始:
默认行为
考虑一个简单的属性文件:
stringprop=propvalue
listprop=value1, value2, value3
mapprop=key1=value1, key2=value2
longprop=100
如果将这些条目放置在类路径中的config.properties文件中,那么以下测试将演示Archaius如何在代码中解析这些属性中的每一个:
@Test
public void testBasicStringProps() {DynamicStringProperty sampleProp = DynamicPropertyFactory.getInstance().getStringProperty("stringprop", "");assertThat(sampleProp.get(), equalTo("propvalue"));
}@Test
public void testBasicListProps() {DynamicStringListProperty listProperty = new DynamicStringListProperty("listprop", Collections.emptyList());assertThat(listProperty.get(), contains("value1", "value2", "value3"));
}@Test
public void testBasicMapProps() {DynamicStringMapProperty mapProperty = new DynamicStringMapProperty("mapprop", Collections.emptyMap());assertThat(mapProperty.getMap(), allOf(hasEntry("key1", "value1"), hasEntry("key2", "value2")));
}@Test
public void testBasicLongProperty() {DynamicLongProperty longProp = DynamicPropertyFactory.getInstance().getLongProperty("longprop", 1000);assertThat(longProp.get(), equalTo(100L));
}
从类路径中的非默认文件加载属性
因此,现在,我们如何处理要从具有不同名称的文件中加载内容的情况,例如newconfig.properties,但仍在类路径中可用。 以下是一种方法:
@Before
public void setUp() throws Exception{ConfigurationManager.loadCascadedPropertiesFromResources("newconfig");
}
有了此更改,以前的测试就可以了。
另一个选择是提供一个系统属性,以指示要从类路径加载的属性文件的名称:
System.setProperty("archaius.configurationSource.defaultFileName", "newconfig.properties");
覆盖环境
现在,我们如何覆盖不同应用程序环境的属性– Archaius提供了一个简洁的功能,可以加载基本属性文件,然后根据上下文对其进行覆盖。 更多细节在这里 。 为了说明这一点,请考虑两个文件,一个包含默认值,一个包含“测试”环境的替代文件。
sample.properties
sampleprop=propvalue
@next=sample-${@environment}.properties
sample-test.properties
sampleprop=propvalue-test
请参阅默认文件@ next = sample- $ {@ environment} .properties末尾的符号,这是一种向Archaius指示需要根据解析的@environment参数加载更多属性的方法。 可以通过两种方式注入此参数,以下测试证明了这一点:
@Before
public void setUp() throws Exception{ConfigurationManager.getConfigInstance().setProperty("@environment", "test");ConfigurationManager.loadCascadedPropertiesFromResources("sample");
}@Test
public void testBasicStringPropsInTestEnvironment() throws Exception {DynamicStringProperty sampleProp = DynamicPropertyFactory.getInstance().getStringProperty("sampleprop", "");assertThat(sampleProp.get(), equalTo("propvalue-test"));
}
现在必须通过调用ConfigurationManager.loadCascadedPropertiesFromResources来加载基本属性文件本身。 。
结论
这些本质上是Netflix Archaius的基础知识,当然还有很多可以从Archaius github网站上的Wiki中收集到的。
- 如果您有兴趣探索此处显示的样本,请在此github项目中找到它们
翻译自: https://www.javacodegeeks.com/2015/05/netflix-archaius-for-property-management-basics.html