1.概要

Netflix

Archaius

は強力な設定管理ライブラリです。

簡単に言えば、これはさまざまなソースから構成プロパティーを収集するために使用できるフレームワークであり、それらへの高速でスレッドセーフなアクセスを提供します。

これに加えて、ライブラリは実行時にプロパティを動的に変更することを可能にし、システムがアプリケーションを再起動することなくこれらの変化を得ることを可能にします。

この入門チュートリアルでは、簡単なSpring Cloud Archaius構成を設定し、内部で何が起こっているのかを説明し、最後にSpringで基本設定を拡張する方法を説明します。

2. Netflix Archaiusの機能

私たちが知っているように、Spring Bootはすでにhttps://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html[外部化された設定]を管理するための手段を提供しています。別のメカニズムを設定する?

さて、

Archaiusは他のどの設定フレームワークでも考えられない便利で面白い機能をいくつか提供します

その重要なポイントのいくつかは以下のとおりです。

  • 動的プロパティと型付きプロパティ

  • プロパティの変更時に呼び出されるコールバックメカニズム

以下のような動的設定ソースの実装実装を用意する

URL、JDBC、およびAmazon DynamoDB
** Spring Boot ActuatorからアクセスできるJMX MBeanまたは

プロパティを検査および操作するためのJConsole
** 動的プロパティ検証

これらの特典は多くのシナリオで有益です。

そこで、Spring Cloudは、ArchaiusがSpring Environmentからプロパティを読み取ることができるように、「Spring Environment Bridge」を簡単に構成できるようにするライブラリに取り組んできました。

3.依存関係



_spring-cloud-starter-netflix-archaiusをアプリケーションに追加しましょう。必要なすべての依存関係をプロジェクトに追加します


.

_

必要に応じて、

spring-cloud-netflix



__dependencyManagement

____セクションに追加して、アーティファクトのバージョンの仕様に依存することもできます。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix</artifactId>
            <version>2.0.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

注:Maven Centralをチェックして、https://search.maven.org/classic/#search%7Cgav%7C1%7Ca%3A%22spring-cloud-starter-netflix-archaiusの最新バージョンを使用していることを確認できます。 %22[スターターライブラリ]。

4.使い方

  • 必要な依存関係を追加すると、フレームワークによって管理されているプロパティにアクセスできるようになります** 。

DynamicStringProperty dynamicProperty
  = DynamicPropertyFactory.getInstance()
  .getStringProperty("baeldung.archaius.property", "default value");

String propertyCurrentValue = dynamicProperty.get();

簡単な例を見て、これがすぐに利用できる方法を見てみましょう。

4.1. 簡単な例

  • デフォルトでは、アプリケーションのクラスパス内の

    config.properties

    という名前のファイルに定義されているすべてのプロパティを動的に管理します。

それでは、それを任意のプロパティを使ってresourcesフォルダに追加しましょう。

#config.properties
baeldung.archaius.properties.one=one FROM:config.properties

今、私たちは特定の瞬間にプロパティの値をチェックする方法が必要です。この場合は、値をJSONレスポンスとして取得する

RestController

を作成します。

@RestController
public class ConfigPropertiesController {

    private DynamicStringProperty propertyOneWithDynamic
      = DynamicPropertyFactory.getInstance()
      .getStringProperty("baeldung.archaius.properties.one", "not found!");

    @GetMapping("/property-from-dynamic-management")
    public String getPropertyValue() {
    return propertyOneWithDynamic.getName() + ": " + propertyOneWithDynamic.get();
    }
}

試してみましょう。このエンドポイントにリクエストを送信することができ、サービスは期待どおりに____config.propertiesに格納されている値を取得します。

今のところ大したことはないね。サービスを再起動せずに、クラスパスファイルのプロパティの値を変更してみましょう。その結果、1分後に、エンドポイントへの呼び出しで新しい値が取得されます。かっこいいですね。

次に、フードの下で何が起こっているのかを理解しようとします。

5.どうやって動くの?

まず最初に、全体像を理解しようとしましょう。

  • Archaiusはhttp://commons.apache.org/proper/commons-configuration/[ApacheのCommons Configuration library]を拡張したもので、動的ソースのためのポーリングフレームワークのような優れた機能が追加され、高スループットとスレッドセーフな実装を備えています。 。**


  • spring-cloud-netflix-archaius

    ライブラリが登場し、すべての異なるプロパティソースをマージし、これらのソースを使ってArchaiusツールを自動設定します。

5.1. Netflix Archaiusライブラリ

それは複合構成、異なる情報源から得られた様々な構成の集合を定義することを操作する。

さらに、これらの構成ソースの中には、実行時に変更のポーリングをサポートしているものもあります。 Archaiusは、これらの種類のソースを設定するためのインタフェースといくつかの定義済み実装を提供しています。

ソースのコレクションは階層化されているため、プロパティが複数の構成に存在する場合、最終的な値は最上位スロットのものになります。

最後に、

ConfigurationManager

がシステム全体の設定と展開のコンテキストを処理します。それは最終的な複合構成をインストールするか、または変更のためにインストールされたものを検索することができます。

5.2. Spring Cloudのサポート

  • Spring Cloud Archaiusライブラリの主なタスクは、すべての異なる設定ソースを

    ConcurrentCompositeConfiguration

    としてマージし、__ConfigurationManagerを使用してインストールすることです。

ライブラリがソースを定義する優先順位は次のとおりです。

  1. 定義された任意のApache共通設定

    AbstractConfiguration

    Bean

文脈で


__Autowired

__Springに定義されているすべてのソース


設定可能な環境

。上記の例で見たデフォルトのArchaiusソース

  1. Apacheの

    SystemConfiguration



    EnvironmentConfiguration

    のソース

このSpring Cloudライブラリが提供するもう1つの便利な機能は、プロパティを監視および操作するためのActuator

__Endpoint

__の定義です。その使用法はこのチュートリアルの範囲外です。

6. Archaius設定の適応と拡張

Archaiusがどのように機能するのかを理解したので、構成をアプリケーションに適応させる方法、または構成ソースを使用して機能を拡張する方法を分析することができます。

6.1. Archaiusがサポートする構成プロパティ

Archaiusに

config.properties

と似た他の設定ファイルを考慮に入れたい場合は、

archaius.configurationSource.additionalUrls

システムプロパティを定義できます。

値はカンマで区切られたURLのリストに解析されるので、たとえば、アプリケーションを起動するときにこのシステムプロパティを追加できます。

-Darchaius.configurationSource.additionalUrls=
  "classpath:other-dir/extra.properties,
  file:///home/user/other-extra.properties"

Archaiusは最初に

config.properties

ファイルを読み、次に他のファイルを指定された順序で読みます。このため、後者のファイルで定義されているプロパティは、以前のものよりも優先されます。

Archaiusのデフォルト設定のさまざまな側面を設定するために使用できる他のシステムプロパティがいくつかあります。


  • archaius.configurationSource.defaultFileName

    :デフォルト

クラスパス内の構成ファイル名
**

archaius.fixedDelayPollingScheduler.initialDelayMills

:初期遅延

設定ソースを読む前に
**

archaius.fixedDelayPollingScheduler.delayMills

:2つの間の遅延

ソースの読み取りデフォルト値は1分です

6.2. Springで追加の設定ソースを追加する

説明したフレームワークで管理するために、どのようにして異なる構成ソースを追加できますか?そして、Spring Environmentで定義されたものよりも高い優先順位で動的プロパティを管理するにはどうすればよいでしょうか。

セクション4.2で述べたことを検討すると、Springによって定義されたコンポジット構成の最高構成は、コンテキストで定義された

AbstractConfiguration

Beanであることがわかります。

したがって、私たちがする必要があるのは、Archaiusによって提供される機能のいくつかを使用して、このApacheの抽象クラスの実装をSpringコンテキストに追加することだけです。

簡単にするために、デフォルトの

config.properties

に似たプロパティファイルを設定する例を見てみましょう。ただし、他のSpring環境とアプリケーションのプロパティよりも優先順位が高くなります。

@Bean
public AbstractConfiguration addApplicationPropertiesSource() {
    PolledConfigurationSource source = new URLConfigurationSource("classpath:other-source.properties");
    return new DynamicConfiguration(source, new FixedDelayPollingScheduler());
}

私たちにとって幸運なことに、それは私たちがほとんど努力なしでセットアップできるいくつかの設定ソースを考えています。それらの設定はこの入門チュートリアルの範囲外です。

7.まとめ

まとめると、Archaiusと、構成管理を利用するために提供する優れた機能のいくつかについて学びました。

また、Spring Cloud自動設定ライブラリがどのように機能し始めたかによって、このライブラリのAPIを便利に使用できるようになりました。

繰り返しますが、このチュートリアルやその他の例に示されているすべての例は、https://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-archaius[Githubリポジトリ]にあります。