2016-03-03 8 views
5

RESTfulサービスを検証するためのテストコードを書いています。私は、テストを実行する前に環境変数を変更するだけで、さまざまな環境のいずれかを指し示すことができるようにしたいと考えています。複数のTypeSafe設定ファイルをマージし、すべてがマージされた後でのみ解決する

私は、3つの異なる設定ファイルをマージすることができるようにしたい:

  • conf/env/default.conf - 環境固有の 値
  • application.conf - - ユーザーのデフォルトの設定では、すべての環境
  • conf/env/<env>.confため 値 上のいずれかの上書き

アイデアは、すべてを単一の設定ファイルに入れたくないということです。設定項目が失われるという悪い編集のリスクを冒してしまいます。そうではなく、それらを別々にしておき、ユーザにそれらを上書きする能力を与えてください。

ここでは難しいです:default.confは、<env>.confに上書きされるものに$ {references}を含み、さらにapplication.confで上書きされることがあります。

3つすべてがマージされるまで解決を延期する必要があります。それ、どうやったら出来るの?

答えて

10

答えは、ConfigFactory.load()の代わりにConfigFactory.parseResource()を使用します。ここで

が完成した結果である

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 = userConfig 
          .withFallback(environmentConfig) 
          .withFallback(defaultConfig) 
          .resolve() 
+1

これはおそらく、ここでより明確にする必要がありますhttps://github.com/typesafehub/config –

関連する問題