Netflix Archaius предоставляет удобный набор функций для загрузки динамических свойств в приложение.
Это сообщение в блоге — только документация степени Архая, которую я понял, есть намного больше, чем я зарегистрировал здесь, но это должно обеспечить хорошее начало:
Поведение по умолчанию
Рассмотрим простой файл свойств:
1
2
3
4
|
stringprop=propvalue listprop=value1, value2, value3 mapprop=key1=value1, key2=value2 longprop= 100 |
Если эти записи помещены в файл config.properties в classpath, то следующий тест демонстрирует, как каждое из этих свойств может быть разрешено Archaius в коде:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@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)); } |
Загрузка свойств из файла не по умолчанию в classpath
Итак, теперь, как нам обработать случай, когда содержимое должно быть загружено из файла с другим именем, скажем, newconfig.properties, но все еще доступного в classpath. Ниже приведен один из способов сделать это:
1
2
3
4
|
@Before public void setUp() throws Exception{ ConfigurationManager.loadCascadedPropertiesFromResources( "newconfig" ); } |
С этим изменением предыдущий тест будет просто работать.
Другой вариант — предоставить системное свойство для указания имени файла свойств для загрузки из classpath:
1
|
System.setProperty( "archaius.configurationSource.defaultFileName" , "newconfig.properties" ); |
Переопределение для сред
Теперь, как нам переопределить свойства для различных сред приложений — Archaius предоставляет удобную функцию, где файл базовых свойств можно загрузить, но затем переопределить в зависимости от контекста. Более подробная информация здесь . Чтобы продемонстрировать это, рассмотрим два файла, один из которых содержит значения по умолчанию, а другой содержит переопределения для «тестовой» среды.
sample.properties
1
2
|
sampleprop=propvalue @next =sample-${ @environment }.properties |
sample-test.properties
1
|
sampleprop=propvalue-test |
См. Примечание в конце файла по умолчанию @ next = sample — $ {@ environment} .properties. Это способ указать Archaius, что необходимо загрузить дополнительные свойства на основе разрешенного параметра @environment . Этот параметр может быть введен несколькими способами, и следующий тест демонстрирует это:
01
02
03
04
05
06
07
08
09
10
11
|
@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 .
- Если вы заинтересованы в изучении примеров, показанных здесь немного больше, они доступны в этом проекте GitHub
Ссылка: | Netflix Archaius для управления недвижимостью — Основы нашего партнера JCG Биджу Кунджуммена в блоге « все и вся» . |