アイキャッチ

実装・エラー解決

SpringBootの設定ファイルを外だしするには

この記事は、Tomcatで動かすWARの設定ファイルをクラスパスから読み込んだときの個別メモです。Spring Bootで環境変数、Profile、jarの外に置く設定ファイルを使い分けたい場合は、application.propertiesの外部化と設定の優先順位へ進んでください。以下の記録とは配備方法や前提を分けて確認できます。
関連記事Spring Bootでapplication.propertiesを外部化する方法|環境変数とProfileの優先順位 Spring Bootの設定は、jar内の application.properties へ本番値を直接書かず、環境変数やjar外の設定ファイルで上書きできます。開発・検証・本番の共通構造はProfileで分け、パスワードなどの秘密情報は環境変数やシークレット管理へ寄せます。 記事を読む
JavaFrameWorkのSpringBootで@ConfigurationPropertiesによって設定ファイルの読み込みが簡素化できることは分かっていたが、業務アプリでよくある「warの外に設定ファイルを配置する」方法について、リマインダとしてメモ
  • @ConfigurationPropertiesで読み込む設定ファイルを外だしする
  • 外だしした設定ファイルにアクセスして読み込む

  事の発端は、業務アプリにSpringBootを使用していた時のこと。 設定値を変えるたびにWARをビルドし直す手間を省くため、当時は設定ファイルをWARの外に置き、Tomcatの再起動時に読み込む構成にしました。@ConfigurationProperties を使う設定クラスに、どこから値を渡すかを調べた記録です。   当時の構成では、設定クラスで次の指定を使いました。

@PropertySource("classpath:application.properties")

設定クラスの @PropertySource は、アプリケーションからクラスパスで参照できる application.properties をSpringのプロパティソースに追加します。 @ConfigurationProperties(prefix = "app") は、その設定環境から app 以下の値を設定クラスへ割り当てます。ファイルの場所を決めるのは、上の @PropertySource とクラスパスの指定です。 Springの悪いところで、分かれば簡単なのですがアノテーションが多すぎて何と何がどんな動きをするのか分かりづらいというのは私が勉強不足なだけなのでしょうか。   当時の手順では、Tomcatの起動スクリプト catalina.sh の CLASSPATH に、WAR外の application.properties を置いたディレクトリを追加します。アプリケーションからその場所がクラスパスで見える構成で、再起動後にファイルを読み込みます。 Spring Bootには起動時に設定ファイルを探索する仕組みがあります。実行可能jarの外部化や環境変数の優先順位は、冒頭の関連記事にある実行例を参照してください。

-実装・エラー解決
-