2015-09-25 43 views
0

我最近更新了Play框架到2.4,並且我的配置管理出了問題。玩! 2.4添加補充配置文件

此前,我曾使用主文件application.conf和特定配置文件application.dev.confapplication.prod.conf來覆蓋一些配置值。

然而,對於新版本,似乎配置沒有正確合併。我用下面的ApplicationLoader爲顯示在documentation

package config 

import com.typesafe.config.ConfigFactory 
import play.api.{Logger, ApplicationLoader, Configuration} 
import play.api.inject._ 
import play.api.inject.guice._ 

class CustomApplicationLoader extends GuiceApplicationLoader { 
    override def builder(context : ApplicationLoader.Context) = { 
    val mode = context.environment.mode.toString 
    val extraConfName = s"application.${mode.toLowerCase}.conf") 
    val extra = Configuration(ConfigFactory.load(extraConfName)) 
    initialBuilder 
     .in(context.environment) 
     .loadConfig(extra ++ context.initialConfiguration) 
     .overrides(overrides(context): _*) 
    } 
} 

而且我在application.conf文件中添加了這個類裝載器:

play.application.loader = "config.CustomApplicationLoader" 

但僅從application.conf值似乎是考慮到在最終配置。有沒有想到這可能來自哪裏?

回答

0

看來我從ConfigFactory使用了錯誤的方法,使用方法parseResource將只檢索額外的鍵,而不是像load那樣將它們放在默認配置中。

所以下面的代碼將如預期:

class CustomApplicationLoader extends GuiceApplicationLoader { 
    override def builder(context : ApplicationLoader.Context) = { 
    val mode = context.environment.mode.toString 
    val extraConfName = s"application.${mode.toLowerCase}.conf" 
    val extra = Configuration(ConfigFactory.parseResources(extraConfName)) 
    initialBuilder 
     .in(context.environment) 
     .loadConfig(context.initialConfiguration ++ extra) 
     .overrides(overrides(context): _*) 
    } 
}