29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpringBootのapplication.properties内で環境変数を使う

Posted at

目的

環境依存値をアプリケーション内に埋め込むのではなく外部化しましょうという話はもはや常識になっていますが、特にSpringBootの場合は様々な方法があります。公式ガイドでも1章まるまるその話題に費やしています。

24. Externalized Configuration

環境ごとにプロパティファイルを分けるとか、いや、せっかくSpringBootなんだからConfigurationサーバを使うべきだとかいろいろ流儀はあると思いますが、今回はThe Twelve-Factor Appに従って環境変数を考えてみます。

アプリケーション内で環境変数を参照するためには@Valueアノテーションを使う方法がありますが、JPAのようにapplication.propertiesに設定をゴリゴリ書く場合はその方法は使えません。そこで、application.properties内で環境変数を使う方法がありました。

方法

${環境変数:デフォルト値}の形式で記述します。

application.properties
hoge.fuga = ${FOO:bar}

いや、当たり前でしょとは言わないでください。意外にこれ、ガイドにきちんと書いてなかったりします(書いてあったらごめんなさい)。

個人的には、環境によってビルドパラメータを変えるとか、あるプロパティはソースコード内で取得して、別の値はフレームワークにまかせて、というのは健全ではないと思っているので、設定を集約できるのはいいことだと思っています。

また、デフォルト値を入れられるのもいいです。例えばDB接続でUT時はデフォルトでlocalhost、IT以降は基盤が提供する環境変数が示すホストにつなぐということが、プロパティファイルを切り替えずにできるわけです。

はやりのKubernetes(k8s)でも便利です。k8sではServiceのホスト名とポート名が同じネームスペース内であれば環境変数で参照できますので、マイクロサービスのディスカバリーとしても使えます。

以上です。

29
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?