◀ 20.

Spring BootにおけるApplication.propertiesの環境依存設定の分割方法

▶
この記事の要点
  • Spring Boot で環境別 application.properties を分割する方法
  • 基本: application.properties に共通設定、application-{profile}.properties に環境固有
  • プロファイル指定: 実行時に --spring.profiles.active=production または環境変数
  • 共通設定と環境差を分ける。実行プロファイルとMavenのビルド設定は別。秘密情報を設定ファイルへ直書きしない

 

Spring Bootにおける本番やステージングのDB接続情報等の違いをどう分割すればよいか記載します。

 

application.propertiesの分割

基本的にapplication.propertiesに設定情報を記載しますが、以下の本番とステージング用のファイルを更に作成します。

・application.properties (元からある設定ファイル 本番とステージングで共通の設定を記述する)

・application-production.properties (本番用のファイル)

・application-staging.properties (ステージング用のファイル)

 

Eclipse(STS)での実行方法

以下の画像は2019年当時のSTS画面です。現在の版でラベルや配置が異なる場合は、Spring Bootアプリを起動する設定のプロファイル・環境変数・プログラム引数を確認してください。画像と当時の操作は残しています。

実行時に本番かステージングかを選択する必要があります。

Eclipseタブの「Run」→ 「Run Configurations...」を選択します。

「Spring Boot App」配下のプロジェクト名を選択して以下の画面を開きましょう。

Application.propertiesの環境依存設定の分割方法

profileに環境名を指定することで、アプリ起動時に指定した環境で起動します。

 

Eclipse(STS)でのビルド方法

※以下、mavenの例です。

同じく「Run Configurations...」の「Maven Build」において対象のプロジェクト名を指定します。

「Environment」に「SPRING_PROFILES_ACTIVE」を「staging」で設定します。

Application.propertiesの環境依存設定の分割方法

この環境変数は、そのMavenプロセスから起動するSpring Bootアプリやテストに渡る場合があります。しかし通常のpackageだけで、完成したJARの実行プロファイルがstagingに固定されるわけではありません。Mavenの-Pで選ぶビルドプロファイル、リソースフィルタリング、テストやspring-boot:runなどの実行内容は別に確認します。

 

jarファイルの実行時

jarファイルを実行する場合は以下のパラメータを指定することで環境を指定することができます。

java -jar sample.jar --spring.profiles.active=staging

 

同じJARを実行設定で切り替える

通常は共通設定と環境別設定を含む同じ成果物を使い、起動時に有効なSpringプロファイルを指定します。Mavenプロファイルを使ってファイルを除外・置換する独自ビルドもあるため、自分のpom.xmlも確認してください。ここではSpring Boot 3.5.6 / Java 21の小さな独立例を検証しました。全Boot版・実システムのDB接続を検証したという意味ではありません。

src/main/resources/application.properties

spring.application.name=profile-check
spring.main.banner-mode=off
logging.level.root=OFF
demo.label=common
demo.shared=shared-value

src/main/resources/application-staging.properties

demo.label=staging

src/main/resources/application-production.properties

demo.label=production

demo.labelとdemo.sharedは説明用のダミー値です。stagingを有効にするとlabelはstagingへ上書きされ、sharedは共通値のままです。productionは自動で本番と認識される特別な名前ではなく、ファイル名と指定したプロファイル名を対応させます。

起動する例

以下のprofile-check.jarは検証用JARです。元記事のsample.jarは実際の成果物名へ読み替えてください。

java -jar target/profile-check.jar --spring.profiles.active=staging
java -jar target/profile-check.jar --spring.profiles.active=production

上は別々の起動例です。環境変数SPRING_PROFILES_ACTIVE=productionでも指定できます。通常の設定優先順位ではコマンドラインが環境変数より優先されるので、両方に違う値を書かないよう管理してください。デフォルト設定やプログラムによる変更があるアプリでは、その実装も確認します。

有効な設定を安全に確認する

次の独立検証アプリは、アクティブなプロファイル名とダミー値だけを表示します。実システムの設定全体・DBパスワード・トークンをログへ出す例ではありません。

package example;

import java.util.Arrays;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProfileCheck {
    public static void main(String[] args) {
        var application = new SpringApplication(ProfileCheck.class);
        application.setWebApplicationType(WebApplicationType.NONE);
        try (var context = application.run(args)) {
            var environment = context.getEnvironment();
            System.out.println("active=" + Arrays.toString(environment.getActiveProfiles()));
            System.out.println("label=" + environment.getProperty("demo.label"));
            System.out.println("shared=" + environment.getProperty("demo.shared"));
        }
    }
}

staging指定時の出力は次のとおりです。

active=[staging]
label=staging
shared=shared-value

今回確認した起動結果

起動条件結果
指定なし明示的activeは空、label=common。productionへ自動選択されない
引数stagingactive=staging、label=staging
環境変数productionactive=production、label=production
環境変数production + 引数staging引数が優先されstaging
staging + 引数demo.label=clilabel=cli。プロファイルファイルより引数が優先
引数staging,production両方有効、同じキーのlabelは後のproduction

検証JARはビルド時の環境変数をstagingにして作成し、その同じJARを上記6条件で起動しました。3設定ファイルが元の内容でJARに含まれることと、起動前後でJARのSHA256が変わらないことも確認しています。Mavenでのpackage成功だけを実行プロファイル確認の代わりにしません。

運用時の注意

  • DBのパスワードやAPIキーはGitに直書きせず、運用の秘密情報管理から渡す。環境別に分けただけで安全にはならない。
  • 環境変数は実際にアプリを起動するプロセスへ渡す。ビルド用ターミナルとサービス起動環境は別の場合がある。
  • Spring Boot 3.5のspring.profiles.activeは共通設定など非プロファイル固有の文書に指定する。application-staging.properties自身へ別プロファイルの有効化を書かない。
  • 複数プロファイル・外部設定ファイル・コマンドラインが競合したら、実際の有効プロファイルと秘密でない設定値だけを確認する。
  • DBを切り替える前に接続先とデータ操作の影響を検証環境で確認する。起動成功だけで本番DBの安全性を保証しない。

STS全体の操作、Mavenの独自リソース処理、実DB接続は未検証です。公式資料: Spring Boot 3.5のプロファイル、外部設定と優先順位(2026年10月確認)。

子ページ

子ページはありません

同階層のページ
  1. インストール(eclipseプラグイン)
  2. クイックスタート
  3. プロジェクトの作成
  4. Spring Bootプロジェクトの作成
  5. Spring Bootプロジェクトの実行
  6. Spring BootでHello World!
  7. アノテーション一覧
  8. DB接続設定からエンティティおよびリポジトリの作成、値の取得まで(JPA編)
  9. DB接続設定や値の取得(JdbcTemplate編)
  10. ビューから値をモデルに格納しコントローラーで受け取る方法
  11. コントローラーにてモデルに値を格納してビューに渡す方法
  12. テンプレートエンジン
  13. ModelとModelAndViewの違い
  14. AOPの使用方法
  15. classpath: 内部ファイルの読み込み
  16. file: 外部ファイルの読み込み
  17. CSVファイルアップロード方法(Ajax)
  18. CSVファイルダウンロード方法(Ajax)
  19. Spring Bootプロジェクトのビルドと本番環境へのデプロイ方法(内部tomcat使用)
  20. Application.propertiesの環境依存設定の分割方法
  21. JPAにおけるEntityManagerの取得方法
  22. JPAにおけるjava.sql.Connectionの取得方法
  23. エラー一覧
  24. jarの引数を受け取る方法
  25. Spring BootでGmailからメール送信
  26. 複数のDBに接続する設定(Spring Boot & JPA編)
  27. ポート番号の変更
  28. Basic認証の実装と特定のURLに限定する方法
  29. Spring SecurityのBasic認証の無効化
  30. 独自のエラーページを定義する方法
  31. プロパティファイルの値やjar実行時の引数を取得する方法