
//// このファイルを編集しないでください。生成されたファイルです。 このファイルへの手動による変更は、再生成時に失われます。 代わりに 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 構成でプラグインするのは簡単です。
== Features
=== Spring Cloud Config Server
Spring Cloud Config Server には、次の利点があります。
@EnableConfigServer を使用して Spring Boot アプリケーションに簡単に組み込み可能=== Spring Cloud Config Client
特に Spring アプリケーション向けに、Spring Cloud Config Client では次のことができます。
Environment を初期化します。@Beans のための @RefreshScope。/env: Environment の更新と @ConfigurationProperties およびログレベルの再バインド用。
** /refresh: @RefreshScope ビーンをリフレッシュするため。
** /restart: Spring コンテキストを再起動するため(デフォルトでは無効)。
** /pause と /resume: ApplicationContext の Lifecycle メソッド(stop() と )を呼び出すため。== Quick 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、ローカルファイルシステムがあります。
=== Client Side Usage
これらの機能をアプリケーションで使用するには、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 /> <!-- lookup parent from repository -->
</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>
<!-- repositories also needed for snapshots and milestones -->
次に、次のような 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 ファイルに追加できます。
NOTE: ${spring.application.name} プロパティを設定するときは、正しいプロパティソースの解決に関する問題を防ぐために、アプリ名に予約語 application- をプレフィックスとして付けないでください。
ブートストラッププロパティは、次の例に示すように、高優先度のプロパティソースとして /env エンドポイントに表示されます。
```configService:/というプロパティソースには、値がbarのfoo` プロパティが含まれており、最も高い優先度になります。
NOTE: プロパティソース名の URL は git リポジトリであり、構成サーバーの URL ではありません。
=== Sample Application
サンプルアプリケーションは 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 を使用するため、そこでローカルに変更を加え、実行中のアプリに反映されるのを確認できます。次の例は、テストケースをいじっているセッションを示しています。
refresh エンドポイントは、"sample" プロパティが変更されたことを報告します。
== Building
:jdkversion: 1.7
=== Basic Compile and Test
ソースをビルドするには、JDK {jdkversion} をインストールする必要があります。
Spring Cloud は、ほとんどのビルド関連アクティビティで Maven を使用します。関心のあるプロジェクトをクローンして、次のように入力すると、すぐに開始できるはずです。
NOTE: 自分で Maven (>=3.3.3) をインストールし、以下の例の ./mvnw の代わりに mvn コマンドを実行することもできます。その場合、ローカルの Maven 設定に spring のプレリリース成果物のリポジトリ宣言が含まれていない場合は、-P spring を追加する必要があるかもしれません。
NOTE: MAVEN_OPTS 環境変数に -Xmx512m -XX:MaxPermSize=128m のような値を設定して、Maven が利用できるメモリ量を増やす必要がある場合があります。.mvn 構成でこれをカバーしようとしているので、ビルドを成功させるためにこれを行わなければならない場合は、ソース管理に設定を追加するためのチケットを発行してください。
プロジェクトのビルド方法のヒントについては、.travis.yml があれば参照してください。「script」コマンドと、場合によっては「install」コマンドがあるはずです。また、「services」セクションを確認して、ローカルで実行する必要のあるサービス(例: mongo や rabbit)があるかどうかを確認してください。「before_install」にある git 関連の部分は、git 資格情報の設定に関連しており、すでに持っているので無視してください。
ミドルウェアを必要とするプロジェクトには通常 docker-compose.yml が含まれているため、https://docs.docker.com/compose/[Docker Compose] を使用して Docker コンテナ内でミドルウェアサーバーを実行することを検討してください。mongo、rabbit、redis の一般的なケースの具体的な手順については、https://github.com/spring-cloud-samples/scripts[scripts デモリポジトリ] の README を参照してください。
NOTE: どうしてもうまくいかない場合は、.travis.yml のコマンド(通常は ./mvnw install)でビルドしてください。
=== Documentation
spring-cloud-build モジュールには "docs" プロファイルがあり、それを有効にすると、src/main/asciidoc から asciidoc ソースをビルドしようとします。そのプロセスの一環として README.adoc を探し、すべての include をロードして処理しますが、解析やレンダリングは行わず、${main.basedir}(デフォルトでは ${basedir}、つまりプロジェクトのルート)にコピーするだけです。README に変更がある場合は、Maven ビルド後に正しい場所に変更されたファイルとして表示されます。コミットしてプッシュするだけです。
=== Working with the code
特定の IDE を好みがない場合は、コードを扱う際に https://www.springsource.com/developer/sts[Spring Tools Suite] または https://eclipse.org[Eclipse] を使用することをお勧めします。Maven サポートには https://eclipse.org/m2e/[m2eclipse] Eclipse プラグインを使用しています。Maven 3.3.3 以上を使用している限り、他の IDE やツールでも問題なく動作するはずです。
==== Importing into eclipse with m2eclipse
Eclipse を使用する場合は、https://eclipse.org/m2e/[m2eclipse] Eclipse プラグインをお勧めします。m2eclipse をまだインストールしていない場合は、「Eclipse マーケットプレイス」から入手できます。
NOTE: 古いバージョンの m2e は Maven 3.3 をサポートしていないため、プロジェクトを Eclipse にインポートしたら、m2eclipse にプロジェクトに適したプロファイルを使用するように指示する必要もあります。プロジェクトの POM に関連するさまざまなエラーが多数表示される場合は、最新のインストールであることを確認してください。m2e をアップグレードできない場合は、"spring" プロファイルを settings.xml に追加してください。または、親 pom の "spring" プロファイルからリポジトリ設定を settings.xml にコピーすることもできます。
==== Importing into eclipse without m2eclipse
m2eclipse を使用したくない場合は、次のコマンドを使用して Eclipse プロジェクトのメタデータを生成できます。
$ ./mvnw eclipse:eclipse
生成された Eclipse プロジェクトは、file メニューから import existing projects を選択してインポートできます。
=== JCE
「Illegal key size」による例外が発生し、Sun の JDK を使用している場合は、Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files をインストールする必要があります。詳細については、次のリンクを参照してください。
https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html[Java 6 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html[Java 7 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html[Java 8 JCE]
使用している JRE/JDK x64/x86 のバージョンに応じて、JCE ファイルを JDK/jre/lib/security フォルダーに解凍します。
== Contributing
:spring-cloud-build-branch: master
Spring Cloud は、制限のない Apache 2.0 ライセンスの下でリリースされており、非常に標準的な Github 開発プロセスに従い、問題には Github トラッカーを使用し、プルリクエストを master にマージします。些細なことでもコントリビュートしたい場合は、ためらわずに、以下のガイドラインに従ってください。
=== Sign the Contributor License Agreement
重要なパッチやプルリクエストを受け付ける前に、https://cla.pivotal.io/sign/spring[コントリビューターライセンス契約] への署名が必要です。コントリビューター契約に署名しても、メインリポジトリへのコミット権限は誰にも付与されません。ただし、あなたのコントリビューションを受け入れられることを意味し、受け入れた場合は著者クレジットが付与されます。アクティブなコントリビューターはコアチームへの参加を求められ、プルリクエストをマージする権限が与えられる場合があります。
=== Code of Conduct
このプロジェクトは、Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[行動規範] に準拠しています。参加することにより、この規範を守ることが期待されます。受け入れがたい行為は [email protected] に報告してください。
=== Code Conventions and Housekeeping
これらはどれもプルリクエストに必須ではありませんが、すべて役に立ちます。また、最初のプルリクエストの後、マージの前に追加することもできます。
eclipse-code-formatter.xml ファイルを使用してフォーマッター設定をインポートできます。IntelliJ を使用する場合は、https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter Plugin] を使用して同じファイルをインポートできます。.java ファイルにはすべて、あなたを識別する @author タグを少なくとも含む簡単な Javadoc クラスコメント、できればクラスの目的に関する段落を少なくとも 1 つ含めるようにしてください。.java ファイルに ASF ライセンスヘッダーコメントを追加します(プロジェクト内の既存ファイルからコピー)。@author として自分を追加します。Fixes gh-XXXX(XXXX は問題番号)を追加してください。=== Checkstyle
Spring Cloud Build には、一連の checkstyle ルールが付属しています。これらは spring-cloud-build-tools モジュールにあります。モジュール内の最も注目すべきファイルは次のとおりです。
<1> デフォルトの Checkstyle ルール <2> ファイルヘッダーの設定 <3> デフォルトの抑制ルール
==== Checkstyle configuration
Checkstyle ルールは デフォルトでは無効 です。プロジェクトに checkstyle を追加するには、次のプロパティとプラグインを定義するだけです。
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
${project.root}/src/checkstyle/checkstyle-suppressions.xml ファイルを定義すれば十分です。例:.projectRoot/src/checkstyle/checkstyle-suppresions.xml${spring-cloud-build.rootFolder}/.editorconfig と ${spring-cloud-build.rootFolder}/.springformat をプロジェクトにコピーすることをお勧めします。そうすれば、いくつかのデフォルトのフォーマットルールが適用されます。これは、次のスクリプトを実行することで行えます:```bash
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== IDE セットアップ
==== Intellij IDEA
Intellij をセットアップするには、コーディング規約、検査プロファイルをインポートし、Checkstyle プラグインを設定する必要があります。次のファイルは、https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build] プロジェクト内にあります。
.spring-cloud-build-tools/
----
└── src
├── checkstyle
│ └── checkstyle-suppressions.xml <3>
└── main
└── resources
├── checkstyle-header.txt <2>
├── checkstyle.xml <1>
└── intellij
├── Intellij_Project_Defaults.xml <4>
└── Intellij_Spring_Boot_Java_Conventions.xml <5>
----
<1> デフォルトの Checkstyle ルール
<2> ファイルヘッダーのセットアップ
<3> デフォルトの抑制ルール
<4> Checkstyle ルールのほとんどを適用する Intellij のプロジェクトデフォルト
<5> Checkstyle ルールのほとんどを適用する Intellij のプロジェクトスタイル規約
.コードスタイル
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-code-style.png[Code style]
`File` -> `Settings` -> `Editor` -> `Code style` の順に移動します。そこで、`Scheme` セクションの横にあるアイコンをクリックします。次に、`Import Scheme` の値をクリックし、`Intellij IDEA code style XML` オプションを選択します。`spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml` ファイルをインポートします。
.検査プロファイル
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-inspections.png[Code style]
`File` -> `Settings` -> `Editor` -> `Inspections` の順に移動します。そこで、`Profile` セクションの横にあるアイコンをクリックします。次に、`Import Profile` をクリックし、`spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml` ファイルをインポートします。
.Checkstyle
Intellij を Checkstyle で動作させるには、`Checkstyle` プラグインをインストールする必要があります。また、JUnit アサーションを自動変換するために `Assertions2Assertj` をインストールすることをお勧めします。
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-checkstyle.png[Checkstyle]
`File` -> `Settings` -> `Other settings` -> `Checkstyle` の順に移動します。そこで、`Configuration file` セクションの `+` アイコンをクリックします。ここで、Checkstyle ルールをどこから取得するかを定義する必要があります。上の画像では、クローンした Spring Cloud Build リポジトリからルールを取得しています。ただし、Spring Cloud Build の GitHub リポジトリを指定することもできます(例: `checkstyle.xml` の場合: `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml`)。次の変数を提供する必要があります:
- `checkstyle.header.file` - Spring Cloud Build の `spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` ファイルを、クローンしたリポジトリ内または `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` URL 経由で指定してください。
- `checkstyle.suppressions.file` - デフォルトの抑制ルールです。Spring Cloud Build の `spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` ファイルを、クローンしたリポジトリ内または `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` URL 経由で指定してください。
- `checkstyle.additional.suppressions.file` - この変数はローカルプロジェクトの抑制ルールに対応します。例: `spring-cloud-contract` で作業している場合。その場合は、`project-root/src/checkstyle/checkstyle-suppressions.xml` フォルダーを指定してください。`spring-cloud-contract` の例: `/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml`。
重要: 本番ソースとテストソースの両方に Checkstyle ルールを適用するため、`Scan Scope` を `All sources` に設定することを忘れないでください。
start()