複数の application.properties
の切り替え
Springフレームワークでは、アプリケーション内で使う設定を application.properties
に書き込み、実行時に設定内容を反映させることができます。
application.properties
// DB接続先 spring.datasource.url=https://hoge.fuga... spring.datasource.driver-class-name=db-hoge... spring.datasource.username=hogeDB spring.datasource.password=hogehoge // Spring Batch のアプリ起動時の設定 spring.batch.job.enabled=false ...
application.properties
には実行環境ごとに変化しやすいアプリ内で使用できる変数を記述しておくことで、アプリケーションの実装に変更を加えずにDBの接続先やロガーのデバッグレベルの設定などを変更することができます。
このような設定情報のプリセットを開発/UAT/本番など複数の環境用に用意して、各環境ごとに切り替えたいという場合がよくあります。
Springでは、適用したい application.properties
を application-dev.properties
のように環境別に用意し、application.properties
に以下のように記述することで application-dev.properties
の設定をアプリに適用させることができます。
application.properties
spring.profiles.active = dev
application-dev.properties
の dev
の部分には任意の名称を入れることができます。例えば、 application-hoge.properties
ファイルの設定を適用したければ、application.properties
に以下を追加します。
spring.profiles.active = hoge
これで application.properties
の切り替えが行えるようになりました!
application.properties
ファイルの切り替えを環境変数を用いて行う
ただ、デプロイごとにspring.profiles.active
の値を変えるのは面倒です。また、application.properties
をバージョン管理してる場合にいちいち変更差分が出て面倒です。
そこで、環境変数に application.properties
の切り替えを委譲します。
環境変数であれば、Dockerの Dockerfile
やCloudFoundlyの manifest.yml
など、個別のデプロイ環境用Configファイルに使用すべき application.properties
を記述できるようになります。
環境変数 SPRING_PROFILE_ACTIVE
があるとき、 application.properties
内では以下のように参照することができます。
application.properties
spring.profiles.active = ${SPRING_PROFILE_ACTIVE:local}
:
の右隣の local
はデフォルト値です。 SPRING_PROFILE_ACTIVE
が設定されていない場合に、 local
の文字列を spring.profiles.active
に格納します。
これで環境変数経由で application.properties
を切り替えられるようになりました。