处理不同配置文件中的相同设置

时间:2014-03-15 04:33:57

标签: scala playframework config playframework-2.2

我被建议在不同模式下使用2个或更多配置文件:

play -Dconfig.file=/conf/dev_application.conf run

那么,我如何处理不同模式的相同的常见设置?复制粘贴那些不是我使用的。

如果可能,我会使用一个公共配置文件:

play -Dconfig.file=/conf/dev_application.conf /conf/common_application.conf run

就我而言,这是不可能的。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用include声明导入其他配置文件中的设置:

# Note that the name of the file being included must be quoted
include "common_application.conf"

这将导入您的常用配置中的所有配置条目。然后,您还可以在特定于模式的配置文件中覆盖下方任何这些公共密钥的值:

common_application.conf

foo=0

dev_application.conf

# Import common configuration
include "common_application.conf"

# Override common configuration
foo=1

# Dev configuration
bar=0

答案 1 :(得分:1)

好问题,看看我找到了什么:

GlobalSettings有一个onLoadConfig方法,所以你应该可以这样做:

import com.typesafe.config.ConfigFactory

override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader, mode: Mode.Mode): Configuration = {
  val richConfig = config ++ Configuration(ConfigFactory.load(s"${mode.toString.toLowerCase}_application.conf"))
  super.onLoadConfig(richConfig, path, classloader, mode)
}

通过这种方式,您可以将常规设置保留在application.confprod_application.confdev_application.conf中的特定于环境的设置中(但我没有重新检查mode参数的值,所以名称可能不同)

修改

是的,我只是重新检查Mode值。他们在这里:

val Dev: Value
val Prod: Value
val Test: Value

因此,使用此方法,您可以将配置文件命名为dev_application.confprod_application.conftest_application.conf