1. Обзор
Netflix Archaius предлагает библиотеки и функциональные возможности для подключения ко многим источникам данных.
В этом уроке мы узнаем, как получить конфигурации :
- Использование API JDBC для подключения к базе данных
- Из конфигураций, хранящихся в экземпляре DynamoDB
- Путем настройки Zookeeper как динамической распределенной конфигурации
Для ознакомления с Netflix Archaius, пожалуйста, ознакомьтесь с этой статьей .
2. Использование Netflix Archaius с подключением JDBC
Как мы объяснили во вступительном руководстве, всякий раз, когда мы хотим, чтобы Archaius обрабатывал конфигурации, нам нужно будет создать Apache Абстрактная конфигурация боб.
Боб будет автоматически захвачен мостом Spring Cloud и добавлен в составной стек конфигурации Archaius.
2.1. Зависимости
Вся функциональность, необходимая для подключения к базе данных с помощью JDBC, включена в основную библиотеку, поэтому нам не понадобится никаких дополнительных зависимостей, кроме тех, которые мы упомянули во вводном руководстве:
org.springframework.cloud spring-cloud-starter-netflix-archaius org.springframework.cloud spring-cloud-netflix 2.0.1.RELEASE pom import
Мы можем проверить Maven Central, чтобы убедиться, что мы используем последнюю версию библиотеки starter/|.
2.2. Как создать компонент конфигурации
В этом случае нам нужно будет создать Абстрактная конфигурация боб с помощью JDBCConfigurationSource пример.
Чтобы указать, как получить значения из базы данных JDBC, мы должны указать:
- a javax.sql.Datasource объект
- строка запроса SQL, которая извлекает по крайней мере два столбца с ключами конфигураций и соответствующими значениями
- два столбца, указывающие ключи свойств и значения соответственно
Давайте пойдем дальше и создадим этот боб:
@Autowired DataSource dataSource; @Bean public AbstractConfiguration addApplicationPropertiesSource() { PolledConfigurationSource source = new JDBCConfigurationSource(dataSource, "select distinct key, value from properties", "key", "value"); return new DynamicConfiguration(source, new FixedDelayPollingScheduler()); }
2.3. Опробовать Его
Чтобы все было просто и у нас все еще был оперативный пример, мы создадим экземпляр базы данных H2 в памяти с некоторыми исходными данными.
Для этого мы сначала добавим необходимые зависимости:
org.springframework.boot spring-boot-starter-data-jpa 2.0.5.RELEASE com.h2database h2 1.4.197 runtime
Примечание: мы можем проверить последние версии библиотек h2 и spring-boot-starter-data-jpa в Maven Central.
Затем мы объявим сущность JPA, которая будет содержать наши свойства:
@Entity public class Properties { @Id private String key; private String value; }
И мы включим файл data.sql в наши ресурсы, чтобы заполнить базу данных в памяти некоторыми начальными значениями:
insert into properties values('baeldung.archaius.properties.one', 'one FROM:jdbc_source');
Наконец, чтобы проверить значение свойства в любой заданной точке, мы можем создать конечную точку, которая извлекает значения, управляемые Archaius:
@RestController public class ConfigPropertiesController { private DynamicStringProperty propertyOneWithDynamic = DynamicPropertyFactory .getInstance() .getStringProperty("baeldung.archaius.properties.one", "not found!"); @GetMapping("/properties-from-dynamic") public MapgetPropertiesFromDynamic() { Map properties = new HashMap<>(); properties.put(propertyOneWithDynamic.getName(), propertyOneWithDynamic.get()); return properties; } }
Если данные изменятся в любой момент, Archaius обнаружит их во время выполнения и начнет извлекать новые значения.
Конечно, эта конечная точка может быть использована и в следующих примерах.
3. Как создать источник конфигурации с помощью экземпляра DynamoDB
Как и в предыдущем разделе, мы создадим полностью функциональный проект для правильного анализа того, как Archaius управляет свойствами, используя экземпляр DynamoDB в качестве источника конфигураций.
3.1. Зависимости
Давайте добавим следующие библиотеки в ваш pom.xml файл:
com.amazonaws aws-java-sdk-dynamodb 1.11.414 com.github.derjust spring-data-dynamodb 5.0.3 com.netflix.archaius archaius-aws 0.7.6
Мы можем проверить Maven Central на наличие последних версий зависимостей, но для archaius-aws мы предлагаем придерживаться версии, поддерживаемой библиотекой Spring Cloud Netflix .
Зависимость aws-java-sdk-dynamodb позволит нам настроить клиент DynamoDB для подключения к базе данных.
С помощью библиотеки spring-data-dynamodb мы настроим репозиторий DynamoDB.
И, наконец, мы будем использовать библиотеку archaius-aws для создания конфигурации AbstractConfiguration .
3.2. Использование DynamoDB в качестве источника конфигурации
На этот раз AbstractConfiguration будет создана с использованием DynamoDbConfigurationSource объекта:
@Autowired AmazonDynamoDB amazonDynamoDb; @Bean public AbstractConfiguration addApplicationPropertiesSource() { PolledConfigurationSource source = new DynamoDbConfigurationSource(amazonDynamoDb); return new DynamicConfiguration( source, new FixedDelayPollingScheduler()); }
По умолчанию Archaius ищет таблицу с именем “Свойства archaius”, содержащую атрибуты “ключ” и “значение” в базе данных Dynamo для использования в качестве источника.
Если мы хотим переопределить эти значения, нам придется объявить следующие системные свойства:
- Если мы хотим переопределить эти значения, нам придется объявить следующие системные свойства:
- Если мы хотим переопределить эти значения, нам придется объявить следующие системные свойства:
- Если мы хотим переопределить эти значения, нам придется объявить следующие системные свойства:
3.3. Создание полностью функционального примера
Как и в этом руководстве по DynamoDB , мы начнем с установки локального экземпляра DynamoDB, чтобы легко протестировать функциональность.
Мы также будем следовать инструкциям руководства, чтобы создать экземпляр Amazon DynamoDB , который мы “подключили” ранее.
И чтобы заполнить базу данных некоторыми исходными данными, мы сначала создадим таблицу DynamoDB entity для сопоставления данных:
@DynamoDBTable(tableName = "archaiusProperties") public class ArchaiusProperties { @DynamoDBHashKey @DynamoDBAttribute private String key; @DynamoDBAttribute private String value; // ...getters and setters... }
Затем мы создадим CrudRepository для этой сущности:
public interface ArchaiusPropertiesRepository extends CrudRepository{}
И, наконец, мы будем использовать репозиторий и экземпляр Amazon DynamoDB для создания таблицы и последующей вставки данных:
@Autowired private ArchaiusPropertiesRepository repository; @Autowired AmazonDynamoDB amazonDynamoDb; private void initDatabase() { DynamoDBMapper mapper = new DynamoDBMapper(amazonDynamoDb); CreateTableRequest tableRequest = mapper .generateCreateTableRequest(ArchaiusProperties.class); tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1L, 1L)); TableUtils.createTableIfNotExists(amazonDynamoDb, tableRequest); ArchaiusProperties property = new ArchaiusProperties("baeldung.archaius.properties.one", "one FROM:dynamoDB"); repository.save(property); }
Мы можем вызвать этот метод непосредственно перед созданием источника конфигурации DynamoDB .
Теперь мы все готовы запустить приложение.
4. Как настроить Динамическую распределенную конфигурацию Zookeeper
Как мы уже видели раньше о вступительной статье Zookeeper , одним из преимуществ этого инструмента является возможность его использования в качестве распределенного хранилища конфигураций.
Если мы объединим его с Archaius, мы получим гибкое и масштабируемое решение для управления конфигурациями.
4.1. Зависимости
Давайте следовать официальным инструкциям Spring Cloud , чтобы настроить более стабильную версию Zookeeper Apache.
Единственное отличие заключается в том, что нам нужна только часть функциональности, предоставляемой Zookeeper, поэтому мы можем использовать зависимость spring-cloud-starter-zookeeper-config вместо той, которая используется в официальном руководстве:
org.springframework.cloud spring-cloud-starter-zookeeper-config 2.0.0.RELEASE org.apache.zookeeper zookeeper org.apache.zookeeper zookeeper 3.4.13 org.slf4j slf4j-log4j12
Опять же, мы можем проверить последние версии зависимостей spring-cloud-starter-zookeeper-config и zookeeper в Maven Central.
Пожалуйста, убедитесь, что вы избегаете бета-версий zookeeper .
4.2. Автоматическая настройка Spring Cloud
Как поясняется в официальной документации, в том числе spring-cloud-starter-zookeeper-config зависимости достаточно, чтобы настроить источники свойств Zookeeper.
По умолчанию автоконфигурируется только один источник, ищущий свойства в узле config/application Zookeeper. Поэтому этот узел используется в качестве общего источника конфигурации между различными приложениями.
Кроме того, если мы указываем имя приложения с помощью spring.application.имя свойство, другой источник настраивается автоматически, на этот раз выполняется поиск свойств в узле config/ .
Каждое имя узла под этими родительскими узлами будет указывать ключ свойства, а их данные будут значением свойства.
К счастью для нас, поскольку Spring Cloud добавляет эти источники свойств в контекст, Archaius управляет ими автоматически. Нет необходимости создавать абстрактную конфигурацию программно.
4.3. Подготовка исходных данных
В этом случае нам также понадобится локальный сервер Zookeeper для хранения конфигураций в виде узлов. Мы можем следовать этому руководству Apache , чтобы настроить автономный сервер, работающий на порту 2181.
Чтобы подключиться к службе Zookeeper и создать некоторые исходные данные, мы будем использовать клиент куратора Apache:
@Component public class ZookeeperConfigsInitializer { @Autowired CuratorFramework client; @EventListener public void appReady(ApplicationReadyEvent event) throws Exception { createBaseNodes(); if (client.checkExists().forPath("/config/application/baeldung.archaius.properties.one") == null) { client.create() .forPath("/config/application/baeldung.archaius.properties.one", "one FROM:zookeeper".getBytes()); } else { client.setData() .forPath("/config/application/baeldung.archaius.properties.one", "one FROM:zookeeper".getBytes()); } } private void createBaseNodes() throws Exception { if (client.checkExists().forPath("/config") == null) { client.create().forPath("/config"); } if (client.checkExists().forPath("/config/application") == null) { client.create().forPath("/config/application"); } } }
Мы можем проверить журналы, чтобы увидеть источники свойств, чтобы убедиться, что Netflix Archaius обновил свойства после их изменения.
5. Заключение
В этой статье мы узнали, как настроить расширенные источники конфигурации с помощью Netflix Archaius. Мы должны принять во внимание, что он также поддерживает другие источники, такие как Etc, Typesafe, файлы AWS S3 и JClouds.
Как всегда, мы можем проверить все примеры в нашем репозитории Github .