🎈

SpringBootの設定ファイルを外部化したい時

2021/08/11に公開

環境

SpringBoot 1.3.5

jar でデプロイ (war の場合はこの記事の対象外)

どんな時に嬉しいか

開発中は、resources/application.yml を読んで欲しいが、本番時は運用者が設定ファイルを

変更する為に外だしのファイルになっていて欲しいという時。

何をするか

起動時のオプションを以下のように記述すれば OK

REM 適当に改行していますが、実際は一行で入力します
java
 -jar
 -Dspring.config.location="c:pathmyconfig.yml"
 -Dspring.config.name="DummyConfigFilename" appname.jar

解説

spring.config.location は名前に反してファイル名まで入れる必要がある。

#StackOverflow で検索したらファイル名が入ってないパターンが多くてハマった。

spring.config.name にダミーのファイル名を指定しているのは、SpringBoot の設定ファイル

読込順として、クラスパスにある application.yml が優先して読みこまれるため。

これを指定しないと、クラスパス内の application.yml の指定を、外部ファイル

(上記例だと c:pathmyconfig.yml) で上書きするという感じになる。

#この動きが希望であれば、spring.config.name を指定する必要はない

#ただ、外部ファイル側で、キー名を間違えた場合にクラスパス内の指定が使用されるのは

#困るというか、原因究明しにくくなる・・・ような気がするので、spring.config.name  に

#存在しないファイル名を指定して、クラスパス内の設定ファイルを読めないようにしている。

PS

logback の設定ファイルも外部化したのでそのことをあとで追記する。

Discussion