Spring Bootにおける設定ファイルの優先順位と外部設定の活用

設定ファイルの優先順位

Spring Bootプロジェクトでは、アプリケーションの設定を管理するために複数の形式の設定ファイルをサポートしています。主に以下の3種類が使用されます。

  • application.properties
  • application.yml
  • application.yaml

これらは同じ目的を持ちますが、同一プロジェクト内で複数存在する場合、どのファイルの設定が最終的に有効になるかという「優先順位」が重要になります。

例えば、以下のように各ファイルでTomcatのポート番号を異なる値で定義したとします。

# application.properties
server.port=8081
# application.yml
server:
  port: 8082
# application.yaml
server:
  port: 8083

この状態でアプリケーションを起動すると、実際に使用されるのは application.properties の値(8081)です。つまり、ファイル形式ごとの優先順位は次の通りです(高いものから順):

  1. application.properties
  2. application.yml
  3. application.yaml

ただし、実際の開発現場では可読性や構造の明確さから、.yml 形式が主流として採用されることが多いです。一貫性を保つため、プロジェクト内では単一の形式を使用することが推奨されます。

その他の設定方法と優先順位の拡張

Spring Bootは柔軟な設定機構を持っており、ファイルだけでなく、外部からの設定もサポートしています。代表的な方法は以下の2つです。

  • Javaシステムプロパティ-Dkey=value 形式でJVM起動時に指定
  • コマンドライン引数--key=value 形式でアプリケーション実行時に渡す

例として、IDEA上でアプリを実行する際、以下のように設定を追加できます。

-Dserver.port=9000 --server.port=10010

これらの設定も含めた全体の優先順位は、次のように定義されています(低い順 → 高い順):

  1. application.yaml
  2. application.yml
  3. application.properties
  4. Javaシステムプロパティ(-Dserver.port
  5. コマンドライン引数(--server.port

したがって、上記の例では最終的にポート 10010 が使用されます。これは最も優先度が高い設定であるためです。

本番環境での設定適用

ビルド済みのJARファイルをサーバー上で実行する場合でも、同様に外部設定を適用可能です。Mavenで生成したJARに対して、以下のように実行します。

java -Dserver.port=9000 -jar myapp.jar --server.port=10010

このとき、アプリケーションはコマンドライン引数の --server.port=10010 を読み取り、ポート10010で起動します。

なお、JARの正常な実行には、ビルド時に spring-boot-maven-plugin がPOMに含まれている必要があります。Spring Initializrなどで生成されたプロジェクトでは、デフォルトでこの設定が含まれています。

まとめ:5つの設定ソースとその優先順位

Spring Bootでは、合計5種類の設定ソースをサポートしており、それぞれに明確なマージルールと優先順位があります。開発・運用においては、環境ごとに適切な設定方法を選択することで、柔軟かつ安全な構成管理が可能になります。

タグ: Spring Boot 設定ファイル application.properties application.yml コマンドライン引数

7月19日 01:47 投稿