RESTfulサービスを検証するためのテストコードを書いています。テストを実行する前に環境変数を変更するだけで、さまざまな環境でそれを指定できるようにしたいと考えています。
3つの異なる構成ファイルをマージできるようにしたい:
conf/env/default.conf
-すべての環境のデフォルトの構成値conf/env/<env>.conf
-環境固有の値application.conf
-上記のいずれかのユーザーのオーバーライド考えは、私がすべてを単一の構成ファイルにしたくはないということであり、構成項目が失われる原因となる不適切な編集のリスクを冒します。したがって、代わりに、それらを別々にして、ユーザーがそれらをオーバーライドできるようにします。
トリッキーになるのはここです。default.conf
は、<env>.conf
でオーバーライドされることが意図されているものへの$ {references}を含み、application.conf
でさらにオーバーライドされる可能性があります。
3つすべてがマージされるまで、解決を延期する必要があります。それ、どうやったら出来るの?
答えは、ConfigFactory.parseResource()
の代わりにConfigFactory.load()
を使用することです。
これが完成した結果です
private lazy val defaultConfig = ConfigFactory.parseResources("conf/env/default.conf")
private lazy val environmentConfig = ConfigFactory.parseResources("conf/env/" + env + ".conf" )
private lazy val userConfig = ConfigFactory.parseResources("application.conf")
private lazy val config = ConfigFactory.load()
.withFallback(userConfig)
.withFallback(environmentConfig)
.withFallback(defaultConfig)
.resolve()