Netflix Archaius предоставляет удобный набор функций для загрузки динамических свойств в приложение.
Это сообщение в блоге — только документация степени Архая, которую я понял, есть намного больше, чем я зарегистрировал здесь, но это должно обеспечить хорошее начало:
Поведение по умолчанию
Рассмотрим простой файл свойств:
|
1
2
3
4
|
stringprop=propvaluelistprop=value1, value2, value3mapprop=key1=value1, key2=value2longprop=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
|
@Testpublic void testBasicStringProps() { DynamicStringProperty sampleProp = DynamicPropertyFactory.getInstance().getStringProperty("stringprop", ""); assertThat(sampleProp.get(), equalTo("propvalue"));}@Testpublic void testBasicListProps() { DynamicStringListProperty listProperty = new DynamicStringListProperty("listprop", Collections.emptyList()); assertThat(listProperty.get(), contains("value1", "value2", "value3"));}@Testpublic void testBasicMapProps() { DynamicStringMapProperty mapProperty = new DynamicStringMapProperty("mapprop", Collections.emptyMap()); assertThat(mapProperty.getMap(), allOf(hasEntry("key1", "value1"), hasEntry("key2", "value2")));}@Testpublic void testBasicLongProperty() { DynamicLongProperty longProp = DynamicPropertyFactory.getInstance().getLongProperty("longprop", 1000); assertThat(longProp.get(), equalTo(100L));} |
Загрузка свойств из файла не по умолчанию в classpath
Итак, теперь, как нам обработать случай, когда содержимое должно быть загружено из файла с другим именем, скажем, newconfig.properties, но все еще доступного в classpath. Ниже приведен один из способов сделать это:
|
1
2
3
4
|
@Beforepublic 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
|
@Beforepublic void setUp() throws Exception{ ConfigurationManager.getConfigInstance().setProperty("@environment", "test"); ConfigurationManager.loadCascadedPropertiesFromResources("sample");}@Testpublic 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 Биджу Кунджуммена в блоге « все и вся» . |