
分散システム向け集中構成サーバー。HTTP API、プロパティの暗号化/復号化、およびGit、Vault、JDBC、ローカルファイルシステムバックエンドをサポート。
//// このファイルは編集しないでください。自動生成されています。 このファイルへの手動変更は、再生成時に失われます。 代わりに、src/main/asciidoc/ ディレクトリ内のファイルを編集してください。 ////
image::https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master"] image::https://api.codacy.com/project/badge/Grade/f064024a072c477e97dca6ed5a70fccd?branch=master["Codacy code quality", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-config?branch=master&utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-config&utm_campaign=Badge_Grade"]
Spring Cloud Config は、分散システムにおける外部化構成のためのサーバー側およびクライアント側のサポートを提供します。Config Server を使用すると、すべての環境にわたってアプリケーションの外部プロパティを一元管理できます。
クライアントとサーバーの両方の概念は、Spring の Environment および PropertySource 抽象化に同一にマッピングされるため、Spring アプリケーションに非常によく適合しますが、任意の言語で実行される任意のアプリケーションでも使用できます。
アプリケーションが開発からテスト、そして本番へのデプロイパイプラインを通過する際に、それらの環境間の構成を管理し、移行時にアプリケーションが実行に必要なすべてを確実に持つことができます。
サーバーストレージバックエンドのデフォルト実装は git を使用するため、構成環境のラベル付きバージョンを容易にサポートし、コンテンツ管理のための幅広いツールからアクセス可能です。
代替実装を追加し、Spring 構成でプラグインすることは容易です。
== 機能
=== Spring Cloud Config Server
Spring Cloud Config Server は以下の利点を提供します:
@EnableConfigServer を使用して Spring Boot アプリケーションに容易に組み込み可能=== Spring Cloud Config Client
特に Spring アプリケーション向けに、Spring Cloud Config Client は以下を可能にします:
Environment を初期化。@Bean のための @RefreshScope。/env: Environment を更新し、@ConfigurationProperties およびログレベルを再バインド。
** /refresh: @RefreshScope の Bean をリフレッシュ。
** /restart: Spring コンテキストを再起動(デフォルトでは無効)。
** /pause および /resume: Lifecycle メソッド(ApplicationContext の stop() および start())を呼び出す。== クイックスタート
このクイックスタートでは、Spring Cloud Config Server のサーバーとクライアントの両方の使用方法を説明します。
まず、次のようにサーバーを起動します:
サーバーは Spring Boot アプリケーションであるため、必要に応じて IDE から実行することもできます(メインクラスは ConfigServerApplication)。
次に、次のようにクライアントを試します:
プロパティソースを検出するデフォルトの戦略は、git リポジトリ(spring.cloud.config.server.git.uri に指定)をクローンし、それを使用してミニ SpringApplication を初期化することです。
ミニアプリケーションの Environment を使用してプロパティソースを列挙し、JSON エンドポイントで公開します。
HTTP サービスは、次の形式のリソースを持ちます:
ここで、application は SpringApplication の spring.config.name として注入され(通常の Spring Boot アプリでは通常 application)、profile はアクティブなプロファイル(またはカンマ区切りのプロパティリスト)、label はオプションの git ラベル(デフォルトは master)です。
Spring Cloud Config Server は、リモートクライアント用の構成をさまざまなソースから取得します。次の例は、git リポジトリ(指定が必要)から構成を取得する方法を示しています:
その他のソースとしては、JDBC 互換データベース、Subversion、Hashicorp Vault、Credhub、ローカルファイルシステムがあります。
=== クライアント側の使用法
アプリケーションでこれらの機能を使用するには、spring-cloud-config-client に依存する Spring Boot アプリケーションとして構築できます(例については、config-client のテストケースまたはサンプルアプリケーションを参照してください)。
依存関係を追加する最も便利な方法は、Spring Boot スターター org.springframework.cloud:spring-cloud-starter-config を使用することです。
Maven ユーザー向けの親 pom と BOM(spring-cloud-starter-parent)、および Gradle と Spring CLI ユーザー向けの Spring IO バージョン管理プロパティファイルもあります。次の例は、典型的な Maven 構成を示しています:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-docs-version}</version>
<relativePath /> <!-- 親リポジトリを参照 -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>{spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- スナップショットおよびマイルストーンにはリポジトリも必要 -->
これで、次のような HTTP サーバーの標準的な Spring Boot アプリケーションを作成できます:
@SpringBootApplication @RestController public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
この HTTP サーバーが実行されると、デフォルトのローカル構成サーバー(実行中の場合)のポート 8888 から外部構成を取得します。
起動動作を変更するには、bootstrap.properties(application.properties と似ていますが、アプリケーションコンテキストのブートストラップフェーズ用)を使用して構成サーバーの場所を変更できます。次の例を参照してください:
デフォルトでは、アプリケーション名が設定されていない場合、application が使用されます。名前を変更するには、次のプロパティを bootstrap.properties ファイルに追加できます:
注: プロパティ ${spring.application.name} を設定するときは、予約語 application- をアプリ名の前に付けないでください。正しいプロパティソースの解決に関する問題を防ぐためです。
ブートストラッププロパティは、/env エンドポイントに優先度の高いプロパティソースとして表示されます。次の例を参照してください:
```configService:<リモートリポジトリの URL>/<ファイル名>という名前のプロパティソースには、値barのfoo` プロパティが含まれており、最も優先度が高くなります。
注: プロパティソース名の URL は git リポジトリであり、構成サーバーの URL ではありません。
=== サンプルアプリケーション
サンプルアプリケーションは https://github.com/spring-cloud/spring-cloud-config/tree/master/spring-cloud-config-sample[こちら]にあります。
これは Spring Boot アプリケーションであるため、通常のメカニズム(例: mvn spring-boot:run)を使用して実行できます。
実行時には、構成サーバーを http://localhost:8888(設定可能なデフォルト)で探すため、サーバーも実行してすべてが連携して動作することを確認できます。
サンプルには、構成サーバーも同じ JVM 内で(異なるポートで)起動されるテストケースがあり、テストは git 構成リポジトリの環境プロパティが存在することをアサートします。
構成サーバーの場所を変更するには、bootstrap.yml(またはシステムプロパティやその他の場所)で spring.cloud.config.uri を設定できます。
テストケースには、サーバーを同じ方法で実行する main() メソッドがあります(ログでポートを確認してください)。そのため、1 つのプロセスでシステム全体を実行して試すことができます(たとえば、IDE で main() メソッドを実行できます)。
main() メソッドは git リポジトリの作業ディレクトリとして target/config を使用するため、そこでローカル変更を行い、実行中のアプリケーションに反映されるのを確認できます。次の例は、テストケースをいじるセッションを示しています:
リフレッシュエンドポイントは、"sample" プロパティが変更されたことを報告します。
== ビルド
:jdkversion: 1.7
=== 基本的なコンパイルとテスト
ソースをビルドするには、JDK {jdkversion} をインストールする必要があります。
Spring Cloud はビルド関連のほとんどのアクティビティに Maven を使用しており、関心のあるプロジェクトをクローンして次のコマンドを入力することで、かなり迅速に開始できるはずです:
注: Maven(>=3.3.3)を自分でインストールし、以下の例で ./mvnw の代わりに mvn コマンドを実行することもできます。その場合、ローカルの Maven 設定に spring プレリリース成果物のリポジトリ宣言が含まれていない場合は、-P spring を追加する必要があるかもしれません。