18
27

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 3 years have passed since last update.

Springのapplication.propertiesでシステム環境変数を扱う

Posted at

はじめに

Spring(Boot)でアプリを作成する際にシステム環境変数から値を取得したい場合がある。
メモ書きも兼ねて取得方法を紹介する。

どんな時にシステム環境変数を使うか

例えばDBに接続したい場合、application.propertiesには以下のような設定をする必要がある。

application.properties
### DB接続設定値 ###
spring.datasource.url=<データベースのURL>
spring.datasource.username=<ユーザー名>
spring.datasource.password=<パスワード>

こういった場合、各設定値をシステム環境変数から取得するようにしておけば、以下のようなメリットが考えられる。

①__環境ごとに設定ファイルを作成する必要が無くなる。__
環境変数を前もって設定しておくか、実行時に設定するようにすれば、同じ設定ファイルを他の環境でも利用することが出来る。
各環境ごとの設定ファイル(例えば、application-devXX.properties)を複数作成し、管理するのは手間になるのでそれを省略できる。

また、環境ごとに読み込むファイルを設定する処理をソースコードに書かなくてよくなる。(SpringBootではデフォルトでapplication.propertiesが読み込まれるので)

②__セキュリティの向上につながる。__
application.properties内にユーザー名やパスパスワードといった秘密にしたい情報をベタ書きした状態で、リモートリポジトリに上げてしまったりするとセキュリティの問題にもなりかねない。

環境変数にしておけば、値は直接書かれないので安心してリモートリポジトリにpushできる。

application.properties内でシステム環境変数を利用する方法

以下のようなフォーマットで設定する。

application.properties
spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}

例えば、spring.datasource.username=${SPRING_DATASOURCE_USERNAME}について説明すると、

①まずシステム環境変数にSPRING_DATASOURCE_USERNAME=HogeHogeのような変数を追加しておく。
環境変数名は設定ファイルの対象の値の「.」「_」に置換したうえで全部大文字にしたものにする。

spring.datasource.usernamespring_datasource_usernameSPRING_DATASOURCE_USERNAME

application.properties内では、${SPRING_DATASOURCE_USERNAME}のようにシステム環境変数名を${}で囲った値にしておく。

これでシステム環境変数をapplication.propertiesから利用することができるようになる。

注意点

eclipseやstsを使って開発をしている場合、システム環境変数を追加した後で、eclipse(sts)上でSpringBootアプリを起動したり、JUnitを実行しようとする際には一度再起動をした方がよい。
システム環境変数が読み取れずにエラーになる場合がある。

おそらく、eclipse(sts)起動時にシステム環境変数を読み込みそれを利用しているため、起動中に環境変数を追加しても反映されないからだと思われるが詳しくは不明。

結果

設定ファイルからシステム環境変数が利用できる!!!!!(ワザップ)

18
27
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
18
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?