記事ディレクトリ
序文
構成ファイルはソフトウェア開発において重要な役割を果たし、ソース コードを変更せずにアプリケーションの動作を調整および構成できるようにします。Spring Boot のような最新のフレームワークの場合、構成ファイルはその柔軟性と使いやすさの鍵となります。適切な構成を使用すると、アプリケーションを開発環境からテストおよび運用環境にシームレスに移行できると同時に、さまざまな展開環境に固有の構成を提供できます。
この記事では、読者が構成ファイルの関連知識を完全に理解し、柔軟に適用できるように、基本的な構文からさまざまな環境での設定に至るまで、Spring Boot 構成ファイルのあらゆる側面を詳しく説明します。次に、構成ファイルのさまざまな側面を段階的に見ていき、Spring Boot 構成についての発見の旅に乗り出しましょう。
1. 設定ファイルの役割
構成ファイルは、アプリケーションのパラメータ、オプション、設定などの情報を保存するために構成を外部化する方法です。設定ファイルの主な機能は次のとおりです。
-
柔軟性と構成可能性: 構成情報をコードから分離することにより、アプリケーションはより柔軟で構成可能になります。これは、コードを変更せずに構成ファイルを変更するだけで、さまざまなビジネス ニーズや環境要件に合わせてアプリケーションの動作を調整できることを意味します。
-
結合の軽減: 構成情報が外部化されると、アプリケーションの異なるコンポーネント間の依存関係が軽減されます。このようにして、特定の構成を変更する必要がある場合、コードの他の部分に影響を与えることなく構成ファイルのみを変更する必要があるため、コード間の結合が減少し、コードの保守と拡張が容易になります。
-
便利な展開と管理: 構成ファイルを通じてアプリケーション設定をコードから分離できるため、展開時にコード全体を再コンパイルすることなく、構成ファイルのみを置換または更新する必要があります。同時に、異なる環境の構成を異なる構成ファイルを通じて管理できるため、異なる環境でのアプリケーションの展開と管理が簡素化されます。
-
セキュリティ: 機密情報 (データベース パスワード、API キーなど) は通常、コードにハードコーディングせず、構成ファイルに保存する必要があります。これにより、コード リポジトリやリリースされたアプリケーション内の機密情報の公開が回避され、アプリケーションのセキュリティが向上します。
-
国際化とローカリゼーション: 構成ファイルを使用して、さまざまな言語のテキストとローカリゼーション情報を保存できます。このようにして、アプリケーション プログラムは、ユーザーの言語環境に応じて対応する設定ファイルを読み取ることができ、国際化とローカリゼーションの要件を実現できます。
次に、設定ファイルの形式
2.1 Spring Boot 設定ファイルの形式
Spring Boot は複数の構成ファイル形式をサポートしており、一般的なものはプロパティと yml (YAML) です。さまざまなシナリオに適した形式が異なるため、開発者は実際のニーズに応じて適切な構成ファイル形式を選択できます。
1. プロパティの形式
プロパティはキーと値のペアのテキスト形式であり、各行にはプロパティと対応する値が含まれます。その形式は次のようになりますkey=value
。Spring Boot では、プロパティ形式を使用してさまざまなプロパティを構成できます。例えば:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myusername
spring.datasource.password=mypassword
server.port=8080
2.yml(YAML)形式
YAML は簡潔で読みやすいデータシリアル化形式で、正式名をYet Another Markup Language
中国語に翻訳すると「別のマークアップ言語」となります。階層関係を形式で表現し、リストやマップなどのデータ構造をサポートします缩进
。Spring Boot では、yml 形式の構成ファイルには通常、接尾辞.yml
または.yaml
が付きます。プロパティ形式と比較して、yml 形式はより柔軟で記述が簡単です。例えば:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: myusername
password: mypassword
server:
port: 8080
Spring Boot プロジェクトでは、理論的にはプロパティ形式と yml 形式の構成ファイルを同時に使用でき、同じプロジェクト内に共存できます。プロパティファイルと yml 設定ファイルが同時に存在し、設定項目が同じ場合は、プロパティファイルの設定が優先され、yml ファイル内の同名の設定が上書きされます。
- この構成の優先順位のメカニズムにより、開発者は、プロパティまたは yml 形式でさまざまなパラメーターを構成することをより柔軟に選択したり、さまざまな構成ファイルでさまざまなタイプの構成情報を編成および管理したりすることができます。
- たとえば、通常の比較的単純な構成項目をプロパティ ファイルに配置し、複雑で構造化された構成項目を yml ファイルに配置して、可読性と保守性を向上させることができます。
ただし、理論的には両方の形式の構成ファイルが許可されていますが、実際のプロジェクトでは、通常は統一された構成ファイル形式が選択されます。そうすることで、次のような利点があります。
-
統合メンテナンス: 統合設定ファイル形式を使用することで、メンテナンスのコスト、混乱、エラーが軽減されます。すべての構成情報は同じ形式に集中しているため、開発チームは統一した方法で維持および管理しやすくなります。
-
失敗率の削減: 統一された構成ファイル形式により、異なる形式間の変換や適応の問題が回避され、潜在的なエラーや失敗が軽減されます。
-
読みやすさ: 統一された構成ファイル形式を使用すると、チーム メンバー間のコミュニケーションと理解を向上させ、形式の違いによる混乱を軽減できます。
-
標準化: 統一された構成ファイル形式は、標準とベスト プラクティスの形成に役立ち、プロジェクトの保守性と安定性が向上します。
2.2 プロパティと yml の違い
構成ファイル形式を選択するときは、次の点を考慮できます。
-
文法構造: プロパティ形式では、単純なキーと値のペアの構造が使用されており、単純な構成シナリオに適しています。yml 形式は、インデントを使用して階層関係を表現するため、複雑な構成構造をより明確に表示でき、より複雑な構成を処理するのに適しています。
-
読みやすさ: yml 形式は、インデントされた構造により、読みやすく、保守しやすくなっています。対照的に、構成が多数ある場合やネストが深い場合、プロパティ形式は冗長で直感的でないように見える場合があります。
-
拡張性: yml 形式は、リストやマップなどのより豊富なデータ構造をサポートしているため、複雑な構成を扱う際の柔軟性が高まります。プロパティ形式は、単純なキーと値のペアのみを表すことができます。
-
キー名の制約: プロパティ形式のキー名にはスペースを含めることはできず、特定の命名規則に従う必要があります。yml 形式のキー名にはスペースを含めることができるため、より柔軟です。
全体として、単純な構成の場合はプロパティ形式の方が直感的で便利ですが、複雑な構成の場合は yml 形式の読みやすさと柔軟性により、より適切な選択となります。実際のアプリケーションでは、プロジェクトのニーズとチームの好みに基づいて、適切な構成ファイル形式を選択することが重要な決定となります。Spring Boot は 2 つの形式を包括的にサポートしており、プロジェクトの実情に応じて選択して使用できます。
3、プロパティ設定ファイル
3.1 プロパティの基本構文
プロパティ構成ファイルは単純なキーと値のペアのテキスト形式で、各行にプロパティと対応する値が含まれており、キー名とキー値を接続するために等号「=」が使用されます。基本的な構文は次のとおりです。
# 配置项目的端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root
PS: コメント情報を追加するには、設定ファイル内で「#」を使用します。
3.2 設定ファイルの読み込み
@Value
Spring Boot で構成値を読み取る 2 つの一般的な方法は@ConfigurationProperties
、どちらも構成ファイル内のプロパティ値を Java オブジェクトにバインドしてコードで簡単に使用できるようにするために使用できます。
1.@Value
注:
@Value
これは Spring フレームワークのアノテーションであり、構成ファイルの属性値を Spring Bean の属性に注入するために直接使用できます。プロパティのアノテーションを使用し@Value
、プロパティのキー名 ( など${key}
) を指定すると、Spring Boot は構成ファイルから対応する値を自動的に読み取り、プロパティに割り当てます。
application.properties
次の内容を含む構成ファイルがあるとします。
app.name=My Application
app.version=1.0.0
次に、Spring Bean のアノテーションを使用して、@Value
これらの設定項目を読み取ることができます。
@Component
public class MyBean {
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String appVersion;
@PostConstruct
public void doPostConstruct(){
System.out.println("appName: " + appName);
System.out.println("appVersion: " + appVersion);
}
}
MyBean
上記のコードは、アノテーションを使用して@Value
構成ファイル内の属性値を読み取り、@PostConstruct
読み取った属性値をアノテーションでマークされたメソッドに出力するコードの作成を表しています。スタートアップ クラスを実行すると、コンソールに関連する構成情報が出力されることがわかります。
2.@ConfigurationProperties
コメント:
@ConfigurationProperties
これは、構成ファイルのプロパティの読み取り専用に Spring Boot によって提供されるアノテーションです。設定ファイルの属性値を Java オブジェクトの対応する属性にバインドでき、より柔軟な設定項目バインディング機能を提供します。@ConfigurationProperties
アノテーションを使用する場合、prefix
属性マッチングのために構成ファイル内の属性のプレフィックスを指定するパラメータを提供する必要があることに注意してください。
application.properties
次の内容を含む構成ファイルがあるとします。
app.name=My Application
app.version=1.0.0
次に、Java クラスを作成し、@ConfigurationProperties
アノテーションを使用してこれらの構成項目を読み取ることができます。
@Component
@Setter
@ConfigurationProperties("app")
public class AppConfig {
private String name;
private String version;
@PostConstruct
public void init() {
System.out.println("appName: " + name);
System.out.println("appVersion: " + version);
}
}
上記の例では、@ConfigurationProperties(prefix = "app")
構成ファイル内の属性プレフィックスは「app」として指定されており、Spring Boot はプレフィックス「app」が付いた構成アイテムを自動的に読み取り、対応する値をクラスの対応する属性に割り当てますAppConfig
。
注意,此时一定要提供 Setter 方法才行,此处我使用的是Lombok工具中的 @Setter 注解为我提供 Setter 方法。
スタートアップ クラスを実行します。
2 つの違い:
@Value
アノテーションは、構成ファイル内のプロパティ値を Spring Bean プロパティに直接挿入するために使用されます。簡単な設定項目の読み込みに適しています。@ConfigurationProperties
アノテーションは、構成ファイル内の複数の属性値を Java オブジェクト内の複数の属性にバインドするために使用され、より柔軟な構成項目バインディング機能を提供し、複雑なデータ構造の構成をサポートします。複雑な設定項目の読み取りに適しています。
要約すると、@Value
と は@ConfigurationProperties
構成値を読み取る一般的な方法ですが、どちらの方法を選択するかは、実際のニーズと構成項目の複雑さによって異なります。
3.3 特性の長所と短所の分析
3.3 プロパティの長所と短所の分析:
アドバンテージ:
-
シンプルで直感的: プロパティ構成ファイルは、書き込みと読み取りが簡単なシンプルなキーと値のペア形式を採用しており、単純な構成項目には非常に直感的で便利です。
-
幅広いサポート: プロパティ形式は、ほとんどのプログラミング言語とフレームワークでサポートされている一般的な構成ファイル形式であるため、さまざまなアプリケーション シナリオに適しています。
-
明確な構成: プロパティ構成ファイルは、構成項目と構成値の対応をキーと値のペアの形式で表現するため、構成が明確で、保守および変更が容易です。
-
高速読み取り: プロパティ設定ファイルの形式がシンプルで読み取り速度が速いため、設定情報を迅速に取得するのに効率的です。
欠点:
-
構造の欠如: プロパティ構成ファイルは、単純なキーと値のペアの構造のみをサポートしており、ネストされたオブジェクトやリストなどの複雑なデータ構造を表すことができません。構成アイテムがより複雑になると、十分な柔軟性が得られない可能性があります。
-
キー名の制限: プロパティ構成ファイル内のキー名にはスペースなどの特殊文字を含めることはできず、特定の命名規則に従う必要がありますが、柔軟性が十分ではありません。
-
複数行の値はサポートされていません: プロパティ構成ファイル内の値は 1 行で記述する必要があり、構成値の複数行表現はサポートされていないため、長いテキストを構成する場合には不便な場合があります。
要約すると、プロパティ構成ファイルは、単純な構成シナリオに適した、シンプルで実用的な構成形式です。ただし、プロパティ形式には、構造の欠如、キー名の制限、冗長性など、明らかな欠点がいくつかあり、構成アイテムがより複雑な場合には使用が制限される可能性があります。実際の開発では、プロジェクトの構成の複雑さと要件に応じて、より複雑な構成要件を満たすために、yml 形式などのより柔軟な構成ファイル形式を選択できます。
4. yml設定ファイルの説明
4.1 ymlの基本構文
yml 形式は、インデントを使用して階層関係を示し、リストやマップなどのデータ構造、コメントや複数行テキストなどの機能をサポートします。基本的な構文は次のとおりです。
- キーと値のペア:
key1: value1
key2: value2
- リスト:
key3:
- item1
- item2
- ネストされたマッピング:
key4:
subkey1: value1
subkey2: value2
- 複数行のテキスト:
key5: |
This is a multiline text.
It can span multiple lines without escaping special characters.
- ノート:
# This is a comment.
key6: value6 # This is another comment.
yml 配置文件的读取和 properties 配置文件读取方法一致。
4.2 yml の使用例
application.yml
次の内容を含む構成ファイルがあるとします。
app:
name: My Application
version: 1.0.0
author: 张三
server:
port: 8080
database:
url: jdbc:mysql://localhost:3306/mydb
username: myusername
password: mypassword
上記の場合、yml 形式の設定ファイルには、一般的に使用されるさまざまな設定方法が示されています。app
このセクションは、アプリケーションの名前、バージョン、作成者などの属性を含むマップです。server
このセクションは、プロジェクトの起動ポートを指定する単純なキーと値のペアです。database
このセクションは、データベース接続に関連するプロパティを含むネストされたマップです。
4.3 ymlの長所と短所の分析
アドバンテージ:
-
柔軟で読みやすい: yml 形式はインデントを使用して階層関係を表すため、読み書きが簡単になります。リスト、マップ、複数行テキストなどの機能がサポートされており、複雑な構成構造をより明確に表示し、構成ファイルの読みやすさと保守性を向上させることができます。
-
複雑なデータ構造のサポート: yml 形式はリストとネストされたマップをサポートします。これらは、より複雑なデータ構造を表現でき、複雑な構成アイテムの処理に適しています。
-
コメント対応:yml形式でコメントを追加でき、設定項目の意味の理解や説明を容易にするための説明コメント情報を設定ファイルに追加できます。
-
キー名に制限されない: yml 形式のキー名にはスペースなどの特殊文字を含めることができ、特定の命名規則に従う必要がなく、より柔軟です。
欠点:
-
学習コスト: プロパティ形式と比較して、yml 形式の構文はより複雑になる可能性があり、初心者が適応して学習するのに時間がかかります。
-
エラーが発生しやすい: yml 形式は階層関係を表すためにインデントに依存しているため、インデントが正しくないと構成解析エラーが発生し、エラーの可能性が高くなります。
要約すると、yml 構成ファイルは、複雑な構成シナリオに適した、柔軟で読みやすい構成形式です。柔軟で読みやすく、複雑なデータ構造をサポートし、注釈をサポートし、キー名に制限されないという利点があり、構成ファイルの読みやすさと保守性を向上させることができます。ただし、yml 形式には、学習コストが高い、エラーが発生しやすいなどの欠点もあり、開発が必要です。
5. 異なる環境で設定ファイルを設定する
Spring Boot では、開発環境、テスト環境、運用環境など、さまざまな環境をさまざまな構成ファイルによって区別できます。Spring Bootはデフォルトでメイン構成ファイルとしてロードapplication.yml
(または)しますが、環境に応じて異なる構成ファイルをロードできます。application.properties
Spring Boot は、命名規則を通じて、対応する環境構成ファイルを自動的に識別してロードできます。
Spring Boot では、名前付けルールを使用して、さまざまな環境で yml 構成ファイルを設定できます。以下は、開発環境、テスト環境、実稼働環境の構成ファイルの命名規則です。
開発環境設定ファイル:application-{profile}.yml
- 命名例:
application-dev.yml
{profile}
この部分は環境名です (例: dev、development など)。テスト環境構成ファイル:
application-{profile}.yml
- 命名例:
application-test.yml
{profile}
この部分は環境名です (例: test、testing など)。本番環境設定ファイル:
application-{profile}.yml
- 命名例:
application-prod.yml
{profile}
この部分は環境名です (例: prod、production など)。上記の命名規則に従って、Spring Boot アプリケーションの起動時に
spring.profiles.active
プロパティを設定することで、現在アクティブな環境構成を指定できます。たとえば、setting はから構成spring.profiles.active=dev
をロードし、setting はから構成をロードします。application-dev.yml
spring.profiles.active=prod
application-prod.yml
開発環境、テスト環境、運用環境という 3 つの環境があるとします。次のように、対応する構成ファイルを作成できます。
application-dev.yml
: 開発環境設定ファイルapplication-test.yml
: テスト環境設定ファイルapplication-prod.yml
: 本番環境設定ファイル
これらの設定ファイルでは、環境ごとに対応する設定項目を設定できます。例えば:
application-dev.yml
:
app:
name: My Dev Application
server:
port: 8080
debug: true
application-test.yml
:
app:
name: My Test Application
server:
port: 8081
debug: true
application-prod.yml
:
app:
name: My Production Application
server:
port: 8082
debug: false
主な設定ファイルapplication.yml
:
app:
name: My Application
version: 1.0.0
spring:
profiles:
default: dev
このようにして、別の環境で Spring Boot アプリケーションを起動すると、Spring Boot はspring.profiles.active
の値に従って、対応する構成ファイルを自動的にロードします。たとえば、 に設定すると、の構成がdev
ロードされ、 に設定すると、の構成がロードされ、 に設定すると、の構成がロードされます。application-dev.yml
test
application-test.yml
prod
application- prod.yml
spring.profiles.active
実際にアプリケーションをデプロイして実行するときは、の値を対応する環境名に変更するだけで、対応する構成を使用できます。この方法により、アプリケーション プログラムの構成がより柔軟になり、異なる環境での切り替えが便利になります。