1. 概要

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

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

2. SpringYAMLファイル

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

2つのプロファイルを含む単純なYAMLファイルを見てみましょう。 2つのプロファイルを区切る3つのダッシュは、新しいドキュメントの開始を示しているため、すべてのプロファイルを同じYAMLファイルに記述できます。

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

spring:
    config:
        activate:
            on-profile: test
name: test-YAML
environment: testing
enabled: false
servers: 
    - www.abc.test.com
    - www.xyz.test.com

---
spring:
    config:
        activate:
            on-profile: prod
name: prod-YAML
environment: production
enabled: true
servers: 
    - www.abc.com
    - www.xyz.com

この設定は、アプリケーションの起動時にこれらのプロファイルのいずれかがアクティブになることを意味するものではないことに注意してください。 プロファイル固有のドキュメントで定義されているプロパティは、明示的に指定しない限りロードされません。 デフォルトでは、アクティブなプロファイルは「default。」のみになります。

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

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

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {
 
    private String name;
    private String environment;
    private boolean enabled;
    private List<String> servers = new ArrayList<>();

    // standard getters and setters

}

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

  • @Configuration –これはクラスをBean定義のソースとしてマークします
  • @ConfigurationProperties –これは、外部構成を構成クラスにバインドして検証します
  • @EnableConfigurationProperties –このアノテーションは、Springアプリケーションで@ConfigurationPropertiesアノテーション付きBeanを有効にするために使用されます

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

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

プロパティファイルで、 spring.profiles.active環境変数をprodに設定します。 このプロパティを定義しない場合、‘default’プロファイルのみがアクティブになります。

プロパティファイルの相対パスは/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("enabled:" + myConfig.isEnabled());
        System.out.println("servers: " + myConfig.getServers());
    }
}

コマンドラインでの出力:

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

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

Spring Bootでは、YAMLファイルを他のYAMLプロパティファイルで上書きできます。

バージョン2.4.0より前では、YAMLプロパティは、優先度の高いものから順に、次の場所にあるプロパティファイルによってオーバーライドされていました。

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

Spring Boot 2.4以降、プロファイル固有であるかどうかに関係なく、外部ファイルは常にパッケージ化されたファイルをオーバーライドします。

6. 結論

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

この記事ののコードは、GitHubで入手できます。