1. 概要

Netflix Archaius は、強力な構成管理ライブラリです。

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

さらに、ライブラリを使用すると、実行時にプロパティを動的に変更できるため、システムはアプリケーションを再起動しなくてもこれらのバリエーションを取得できます。

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

2. NetflixArchaiusの機能

ご存知のように、Spring Bootはすでに外部構成を管理するための機器を提供しています。それでは、なぜわざわざ別のメカニズムを設定する必要があるのでしょうか。

Archaiusは、他の構成フレームワークでは想定されていない便利で興味深い機能をいくつか提供します。 その重要なポイントのいくつかは次のとおりです。

  • 動的プロパティと型付きプロパティ
  • プロパティの変更時に呼び出されるコールバックメカニズム
  • URL、JDBC、AmazonDynamoDBなどの動的構成ソースのすぐに使用できる実装
  • SpringBootActuatorまたはJConsoleがプロパティを検査および操作するためにアクセスできるJMXMBean
  • 動的プロパティの検証

これらの特典は、多くのシナリオで役立ちます。

そのため、Spring Cloudは、ArchaiusがSpring環境からプロパティを読み取れるように、「Spring環境ブリッジ」を簡単に構成できるライブラリに取り組んでいます。

3. 依存関係

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

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

<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をチェックして、最新バージョンのスターターライブラリを使用していることを確認できます。

4. 使用法

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

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

String propertyCurrentValue = dynamicProperty.get();

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

4.1. 簡単な例

デフォルトでは、アプリケーションのクラスパスのconfig.propertiesという名前のファイルで定義されているすべてのプロパティを動的に管理します。

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

#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は、ApacheのCommonsConfigurationライブラリの拡張であり、動的ソースのポーリングフレームワークなどの優れた機能を追加し、高スループットとスレッドセーフな実装を備えています。

次に、 spring-cloud-netflix-archaius ライブラリが機能し、さまざまなプロパティソースをすべてマージし、Archaiusツールをこれらのソースで自動構成します。

5.1. NetflixArchaiusライブラリ

さまざまなソースから取得したさまざまな構成のコレクションである複合構成を定義して動作します。

さらに、これらの構成ソースの一部は、実行時に変更をポーリングすることをサポートしている場合があります。 Archaiusは、これらのタイプのソースを構成するためのインターフェースといくつかの事前定義された実装を提供します。

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

最後に、 ConfigurationManager は、システム全体の構成および展開コンテキストを処理します。 最終的な複合構成をインストールすることも、インストールされた構成を取得して変更することもできます。

5.2. 春のクラウドサポート

Spring Cloud Archaiusライブラリの主なタスクは、すべての異なる構成ソースを ConcurrentCompositeConfiguration としてマージし、ConfigurationManager。を使用してインストールすることです。

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

  1. コンテキストで定義されたApacheCommonConfiguration AbstractConfiguration Bean
  2. Autowired Spring ConfigurableEnvironmentで定義されているすべてのソース
  3. 上記の例で見たデフォルトのArchaiusソース
  4. ApacheのSystemConfigurationおよびEnvironmentConfigurationソース

このSpringCloudライブラリが提供するもう1つの便利な機能は、プロパティを監視および操作するためのアクチュエータエンドポイントの定義です。 その使用法は、このチュートリアルの範囲外です。

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環境で定義されているものよりも優先度の高い動的プロパティをどのように管理できるでしょうか。

セクション4.2で述べたことを確認すると、Springによって定義された複合構成の最高の構成は、コンテキストで定義されたAbstractConfigurationBeanであることがわかります。

したがって、必要なのは、Archaiusが提供する機能の一部を使用して、このApacheの抽象クラスの実装をSpringコンテキストに追加することだけです。Springの自動構成により、管理対象構成に自発的に追加されます。プロパティ

簡単にするために、デフォルトの config.properties と同様のプロパティファイルを構成する例を示しますが、他のSpring環境およびアプリケーションプロパティよりも優先順位が高い点が異なります。 :

@Bean
public AbstractConfiguration addApplicationPropertiesSource() {
    URL configPropertyURL = (new ClassPathResource("other-config.properties")).getURL();
    PolledConfigurationSource source = new URLConfigurationSource(configPropertyURL);
    return new DynamicConfiguration(source, new FixedDelayPollingScheduler());
}

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

7. 結論

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

また、Spring Cloud自動構成ライブラリがどのように機能するかを確認し、このライブラリのAPIを便利に使用できるようにしました。

もう一度、このチュートリアルに示されているすべての例と他の例をGithubリポジトリで見つけることができます。