Spring YAML設定
1. 概要
Springアプリケーションを構成する方法の1つは、YAML構成ファイルを使用することです。
このクイック記事では、YAMLを使用して単純なSpringBootアプリケーションのさまざまなプロファイルを構成します。
参考文献:
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.