spring-bootでリソースファイルを外出しする方法


解決したいことはタイトル通りです。spring-boot では、DB接続情報などを src/main/resources 配下の application.properties に書くことが多いですが、このファイルを外部に置いて、コンパイル時とは別の定義で動作させる方法説明をします。
以前、『Mavenを使ってリソースファイルをJARの外部に配置する方法』というのを投稿しましたが、それの spring-boot 版です。

解決方法

spring-boot では実に簡単です。外部に配置したいリソースファイル(application.properties等)を別フォルダに配置して、実行時のクラスパスとして指定するだけです。

つまり、my-java-app.jar を実行するとして、external_resource フォルダの application.properties を読み込みたい場合、external_resource フォルダを実行時クラスパスに含めます。

フォルダ構成
my-java-app.jar
external_resource
  └ application.properties
コマンド
java -classpath ./external_resource -jar my-java-app.jar

解説

どうしてこのような動作になるかというと、spring-boot ではリソースファイルの読み込み優先順位が次のようになっているからです。

  1. 実行時のクラスパス
  2. コンパイル時の src/main/resources

実際には、以下で他の方が説明しているように読み込みの優先順位については、もっと詳細な定義があります。

最後に

spring-boot はいい感じにかゆいところに手が届くのでありがたいですね。そして、公式ドキュメントを翻訳してくれた @niwasawa さん、ありがとうございました。