2016-03-03 32 views
5

我正在編寫測試代碼來驗證RESTful服務。我希望能夠通過在執行測試之前更改環境變量來將其指向我們任何不同的環境。合併多個TypeSafe配置文件並僅在全部合併後解析

我希望能夠合併三個不同的配置文件:

  • conf/env/default.conf - 缺省配置值 適用於所有環境
  • conf/env/<env>.conf - 特定環境 值
  • application.conf - 用戶的超過 以上

這個想法是,我不希望所有的東西都在一個單獨的配置文件中,並且存在編輯錯誤的風險,導致配置項丟失。相反,保持它們分開,並賦予用戶覆蓋它們的能力。

下面是它變得棘手的地方:default.conf將包含$ {引用}到在<env>.conf中被覆蓋的內容,並可能在application.conf中被進一步覆蓋。

我需要推遲解決,直到所有三個合併。我怎麼做?

回答

10

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

這或許應該作出更清晰這裏https://github.com/typesafehub/config –