Статьи

Netflix Archaius для управления недвижимостью — Основы

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 Биджу Кунджуммена в блоге « все и вся» .