1. 概要

このチュートリアルでは、プロファイルを使用してSpring Cloudのディスカバリークライアントを無効にする方法を見ていきます。 これは、コードを変更せずにサービス検出を有効/無効にする場合に役立ちます。

2. EurekaサーバーとEurekaクライアントをセットアップする

EurekaサーバーとDiscoveryClientを作成することから始めましょう。

まず、 Spring Cloud Netflix Eurekaチュートリアルのセクション2を使用して、Eurekaサーバーをセットアップできます。

2.1. ディスカバリークライアントのセットアップ

次の部分は、サーバーに自分自身を登録する別のアプリケーションを作成することです。 このアプリケーションをディスカバリークライアントとしてセットアップしましょう。

WebEurekaClientスターターの依存関係をpom.xmlに追加しましょう。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

また、クラウドスターターが依存関係管理セクションに存在し、SpringCloudバージョンが設定されていることを確認する必要があります。

Spring Initializr を使用してプロジェクトを作成する場合、これらはすでに設定されています。 そうでない場合は、それらをpom.xmlファイルに追加できます。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>${spring-cloud-dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<properties>
    <spring-cloud-dependencies.version>2021.0.1</spring-cloud-dependencies.version>
</properties>

2.2. 構成プロパティの追加

依存関係を設定したら、新しいクライアントアプリケーションの構成プロパティをapplication.propertiesファイルに追加するだけです。

eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
eureka.instance.preferIpAddress=false
spring.application.name=spring-cloud-eureka-client

これにより、アプリケーションの起動時に、上記で指定したURLにあるEurekaサーバーにアプリケーションが確実に登録されます。 spring-cloud-eureka-clientと呼ばれます。

通常、検出クライアントを有効にするために、構成クラスで@EnableDiscoveryClientアノテーションも使用することに注意してください。 ただし、Spring Cloudスターターを使用する場合は、アノテーションは必要ありません。 DiscoveryClientはデフォルトで有効になっています。 さらに、クラスパスでNetflix Eurekaクライアントが見つかると、自動構成されます。

2.3. Hello World Controller

アプリケーションをテストするには、ヒットできるサンプルURLが必要です。 挨拶メッセージを返す簡単なコントローラーを作成しましょう。

@RestController
public class HelloWorldController {

    @RequestMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}

次に、EurekaサーバーとDiscoveryClientを実行します。 アプリケーションを実行すると、DiscoveryClientがEurekaサーバーに登録されます。 Eurekaサーバーダッシュボードでも同じことがわかります。

3. プロファイルベースの構成

サービス登録を無効にしたい場合があります。 1つの理由は環境かもしれません。

たとえば、ローカルでテストするたびにEurekaサーバーを実行する必要がない場合があるため、ローカル開発環境でディスカバリークライアントを無効にしたい場合があります。 これをどのように達成できるか見てみましょう。

application.properties ファイルのプロパティを変更して、プロファイルごとの検出クライアントを有効または無効にします。

3.1. 個別のプロパティファイルの使用

簡単で一般的な方法の1つは、環境ごとに個別のプロパティファイルを使用することです。

それでは、application-dev.propertiesという名前の別のプロパティファイルを作成しましょう。

spring.cloud.discovery.enabled=false

spring.cloud.discovery.enabledプロパティを使用してディスカバリークライアントを有効/無効にできます。 ディスカバリークライアントを無効にするために、falseに設定しました。

dev プロファイルがアクティブな場合、元のプロパティファイルの代わりにこのファイルが使用されます。

3.2. マルチドキュメントファイルの使用

環境ごとに個別のファイルを使用したくない場合は、マルチドキュメントプロパティファイルを使用することもできます。

これを行うために、2つのプロパティを追加します。

#---
spring.config.activate.on-profile=dev
spring.cloud.discovery.enabled=false

この手法では、‘#—’ を使用して、プロパティファイルを2つの部分に分割します。 さらに、 spring.config.activate.on-profileプロパティを使用します。 これらの2行を組み合わせて使用すると、は、プロファイルがアクティブな場合にのみ現在のパーツで定義されたプロパティを読み取るようにアプリケーションに指示します。 この例では、devプロファイルを使用します。

同様に、以前と同様に、 spring.cloud.discovery.enabledプロパティをfalseに設定しました。

これにより、 dev プロファイルの検出クライアントは無効になりますが、プロファイルがアクティブでない場合は有効のままになります。

4. テスト

次に、EurekaサーバーとDiscovery Clientを実行して、すべてが期待どおりに機能するかどうかをテストします。 プロファイルはまだ追加していません。 アプリケーションを実行すると、DiscoveryClientがEurekaサーバーに登録されます。 Eurekaサーバーダッシュボードでも同じことがわかります。

4.1. プロファイルを使用したテスト

次に、アプリケーションの実行中にプロファイルを追加します。 コマンドライン引数-Dspring.profiles.active= dev を追加して、devプロファイルを有効にすることができます。 アプリケーションを実行すると、今回はクライアントがEurekaサーバーに登録されていないことがわかります。

5. 結論

このチュートリアルでは、プロパティを使用してプロファイルに基づいて構成を追加する方法を学習しました。 同じ方法を使用して、アクティブなプロファイルに基づいてディスカバリークライアントを無効にしました。

いつものように、このチュートリアルのコードはGitHubから入手できます。