1. 序章
YAMLは、構成ファイルで使用される人間にわかりやすい表記法です。 Spring Boot のプロパティファイルよりも、このデータのシリアル化を好むのはなぜですか? 読みやすさと繰り返しの削減に加えて、YAMLはデプロイメントのコードとして構成を記述するのに最適な言語です。
同様に、Spring DevOps にYAMLを使用すると、 12 Factor Authenticator が推奨するように、環境での構成変数の保存が容易になります。
このチュートリアルでは、Spring YAMLとプロパティファイルを比較して、一方を他方よりも使用する主な利点を確認します。 ただし、プロパティファイルの構成よりもYAMLを選択することは、個人的な好みの決定である場合があることを忘れないでください。
2. YAML表記
YAMLは、「 YAML Ai n’tMarkupLanguage」の再帰的頭字語の略です。 次の特性を提供します。
- より明確で人間に優しい
- 階層構成データに最適
- マップ、リスト、スカラータイプなどの拡張機能をサポートします
これらの機能により、YAMLはSpring構成ファイルの完璧なコンパニオンになります。 YAMLを使い始めた人のために、ここで注意が必要です。インデントのルールがあるため、最初は少し面倒な作業になる可能性があります。
それがどのように機能するか見てみましょう!
3. SpringYAML構成
前のセクションで述べたように、YAMLは構成ファイル用の並外れたデータ形式です。 はるかに読みやすく、プロパティファイルよりも拡張された機能を提供します。 したがって、プロパティファイルの構成よりもこの表記を推奨することは理にかなっています。 さらに、バージョン1.2以降、YAMLはJSONのスーパーセットです。
さらに、Springでは、アーティファクトの外部に配置された構成ファイルが、パッケージ化されたjar内の構成ファイルをオーバーライドします。 Spring構成のもう1つの興味深い機能は、実行時に環境変数を割り当てる可能性です。 これは、DevOpsデプロイメントにとって非常に重要です。
スプリングプロファイルを使用すると、環境を分離して、さまざまなプロパティを適用できます。 YAMLは、同じファイルに複数のプロファイルを含める可能性を追加します。
注:この機能は、SpringBoot2.4.0のプロパティファイルでもサポートされています。
この場合、展開の目的で、テスト、開発、本番の3つがあります。
spring:
profiles:
active:
- test
---
spring:
config:
activate:
on-profile: test
name: test-YAML
environment: testing
servers:
- www.abc.test.com
- www.xyz.test.com
---
spring:
config:
activate:
on-profile: prod
name: prod-YAML
environment: production
servers:
- www.abc.com
- www.xyz.com
---
spring:
config:
activate:
on-profile: dev
name: ${DEV_NAME:dev-YAML}
environment: development
servers:
- www.abc.dev.com
- www.xyz.dev.com
注:2.4.0より前のバージョンのSpring Bootを使用する場合は、ここで使用した spring.config.activate.on-profile ではなく、spring.profilesプロパティを使用する必要があります。 。
次に、デフォルトでテスト環境を割り当てる spring.profiles.activeプロパティを確認しましょう。 ソースコードを再構築せずに、さまざまなプロファイルを使用してアーティファクトを再デプロイできます。
Springのもう1つの興味深い機能は、環境変数を介してプロファイルを有効にできることです。
export SPRING_PROFILES_ACTIVE=dev
この環境変数の関連性は、テストセクションで確認できます。 最後に、環境から値を直接割り当てるYAMLプロパティを構成できます。
name: ${DEV_NAME:dev-YAML}
環境変数が構成されていない場合は、デフォルト値dev-YAMLが使用されていることがわかります。
4. 繰り返しと読みやすさの削減
YAMLの階層構造は、構成プロパティファイルの上位レベルを減らす方法を提供します。 例を使って違いを見てみましょう。
component:
idm:
url: myurl
user: user
password: password
description: >
this should be a long
description
service:
url: myurlservice
token: token
description: >
this should be another long
description
プロパティファイルを使用すると、同じ構成が冗長になります。
component.idm.url=myurl
component.idm.user=user
component.idm.password=password
component.idm.description=this should be a long \
description
component.service.url=myurlservice
component.service.token=token
component.service.description=this should be another long \
description
YAMLの階層的な性質により、読みやすさが大幅に向上します。 繰り返しを避けることだけでなく、よく使用されるインデントは、構成の内容と目的を完全に説明します。 YAMLでは、バックスラッシュ\が付いたプロパティファイルの場合と同様に、コンテンツを>文字で複数行に分割することができます。
5. リストと地図
YAMLとプロパティファイルを使用してリストとマップを構成できます。
値を割り当ててリストに保存するには、次の2つの方法があります。
servers:
- www.abc.test.com
- www.xyz.test.com
external: [www.abc.test.com, www.xyz.test.com]
どちらの例でも同じ結果が得られます。 プロパティファイルを使用した同等の構成は、読みにくくなります。
servers[0]=www.abc.test.com
servers[1]=www.xyz.test.com
external=www.abc.test.com, www.xyz.test.com
繰り返しますが、YAMLバージョンはより人間が読める形式で明確です。
同様に、マップを構成できます。
map:
firstkey: key1
secondkey: key2
6. テスト
それでは、すべてが期待どおりに機能しているかどうかを確認しましょう。 アプリケーションのログを確認すると、デフォルトで選択されている環境がテスト中であることがわかります。
2020-06-11 13:58:28.846 INFO 10720 --- [main] com.baeldung.yaml.MyApplication: ...
using environment:testing
name:test-YAML
servers:[www.abc.test.com, www.xyz.test.com]
external:[www.abc.test.com, www.xyz.test.com]
map:{firstkey=key1, secondkey=key2}
Idm:
Url: myurl
User: user
Password: password
Description: this should be a long description
Service:
Url: myurlservice
Token: token
Description: this should be another long description
次の環境でDEV_NAMEを構成することにより、名前を上書きできます。
export DEV_NAME=new-dev-YAML
devプロファイルを使用してアプリケーションを実行すると、環境の名前が変わることがわかります。
2020-06-11 17:00:45.459 INFO 19636 --- [main] com.baeldung.yaml.MyApplication: ...
using environment:development
name:new-dev-YAML
servers:[www.abc.dev.com, www.xyz.dev.com]
SPRING_PROFILES_ACTIVE = prod を使用して、実稼働環境で実行してみましょう。
export SPRING_PROFILES_ACTIVE=prod
2020-06-11 17:03:33.074 INFO 20716 --- [main] ...
using environment:production
name:prod-YAML
servers:[www.abc.com, www.xyz.com]
7. 結論
このチュートリアルでは、プロパティファイルと比較したYAML構成の使用の複雑さについて説明しました。
YAMLは人間にやさしい機能を提供し、繰り返しを減らし、プロパティファイルバリアントよりも簡潔であることを示しました。
いつものように、コードはGitHubでから入手できます。