Spring YAMLの設定

Spring YAML設定

1. 概要

Springアプリケーションを構成する方法の1つは、YAML構成ファイルを使用することです。

このクイック記事では、YAMLを使用して単純なSpringBootアプリケーションのさまざまなプロファイルを構成します。

参考文献:

Spring @Valueのクイックガイド

Spring @Valueアノテーションを使用して、プロパティファイル、システムプロパティなどからフィールドを構成する方法を学びます。

Spring @Valueをデフォルトで使用する

Springで@Valueアノテーションを使用する場合のデフォルト値を設定するための迅速かつ実用的なガイド。

Springで管理されていないクラスにプロパティ値を注入する方法は?

Springのインジェクションメカニズムを直接使用せずに、Javaクラスのプロパティ値を初期化する方法を学びます。

2. SpringYAMLファイル

Springプロファイルは、Springアプリケーションが異なる環境に対して異なるプロパティを定義できるようにします。

以下は、2つのプロファイルを含む単純なYAMLファイルです。 The three dashes separating the two profiles indicate the start of a new document so all the profiles can be described in the same YAML file.

application.ymlファイルの相対パスは/myApplication/src/main/resources/application.yml.です

Springアプリケーションで宣言されていない限り、Springアプリケーションは最初のプロファイルをデフォルトプロファイルとして使用します。

spring:
    profiles: test
name: test-YAML
environment: test
servers:
    - www.abc.test.com
    - www.xyz.test.com

---
spring:
    profiles: prod
name: prod-YAML
environment: production
servers:
    - www.abc.com
    - www.xyz.com

3. YAMLを構成クラスにバインドする

プロパティファイルから関連するプロパティのセットをロードするには、Beanクラスを作成します。

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {

    private String name;
    private String environment;
    private List servers = new ArrayList<>();

    // standard getters and setters

}

ここで使用される注釈は次のとおりです。

  • @Configurationは、クラスをBean定義のソースとしてマークします

  • @ConfigurationPropertiesは、外部構成を構成クラスにバインドして検証します

  • @EnableConfigurationPropertiesこのアノテーションは、Springアプリケーションで@ConfigurationPropertiesアノテーション付きBeanを有効にするために使用されます

4. YAMLプロパティへのアクセス

YAMLプロパティにアクセスするには、YAMLConfigクラスのオブジェクトを作成し、そのオブジェクトを使用してプロパティにアクセスします。

プロパティファイルで、spring.active.profiles環境変数をprodに設定しましょう。 spring.profiles.active,を定義しない場合、デフォルトでYAMLファイルで定義された最初のprofilesプロパティになります。

プロパティファイルの相対パスは/myApplication/src/main/resources/application.properties.です。

spring.profiles.active=prod

この例では、CommandLineRunner.を使用してプロパティを表示します

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private YAMLConfig myConfig;

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.run();
    }

    public void run(String... args) throws Exception {
        System.out.println("using environment: " + myConfig.getEnvironment());
        System.out.println("name: " + myConfig.getName());
        System.out.println("servers: " + myConfig.getServers());
    }
}

コマンドラインの出力:

using environment: production
name: prod-YAML
servers: [www.abc.com, www.xyz.com]

5. YAMLプロパティのオーバーライド

Spring Bootでは、YAMLファイルはそれらの場所に応じて他のYAMLプロパティファイルで上書きできます。 YAMLプロパティは、次の場所にあるプロパティファイルによって、優先順位が最も高い順に上書きできます。

  • パッケージ化されたjarの外に配置されたプロファイルのプロパティ

  • パッケージ化されたjar内にパッケージ化されたプロファイルのプロパティ

  • パッケージ化されたjarの外部に配置されたアプリケーションプロパティ

  • パッケージ化されたjar内にパッケージ化されたアプリケーションプロパティ

6. 結論

このクイック記事では、YAMLを使用してSpringBootアプリケーションでプロパティを構成する方法を説明しました。 また、プロパティがルールをオーバーライドし、その後にYAMLファイルのSpringBootが続くことも確認しました。

この記事のコードは利用可能ですover on GitHub.