我被建议在不同模式下使用2个或更多配置文件:
play -Dconfig.file=/conf/dev_application.conf run
那么,我如何处理不同模式的相同的常见设置?复制粘贴那些不是我使用的。
如果可能,我会使用一个公共配置文件:
play -Dconfig.file=/conf/dev_application.conf /conf/common_application.conf run
就我而言,这是不可能的。有什么想法吗?
答案 0 :(得分:2)
您可以使用include
声明导入其他配置文件中的设置:
# Note that the name of the file being included must be quoted
include "common_application.conf"
这将导入您的常用配置中的所有配置条目。然后,您还可以在特定于模式的配置文件中覆盖下方任何这些公共密钥的值:
foo=0
# 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.conf
和prod_application.conf
或dev_application.conf
中的特定于环境的设置中(但我没有重新检查mode
参数的值,所以名称可能不同)
修改强>
是的,我只是重新检查Mode值。他们在这里:
val Dev: Value
val Prod: Value
val Test: Value
因此,使用此方法,您可以将配置文件命名为dev_application.conf
,prod_application.conf
和test_application.conf