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

Scala 处理不同配置文件中的相同设置,scala,playframework,config,playframework-2.2,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 就我而言,这是不可能的。有什么想法吗?好问题,看看我发现了什么: 有一个o

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

play -Dconfig.file=/conf/dev_application.conf run
那么,我如何处理不同模式下相同的一些常见设置?复制粘贴这些不是我会用的

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

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

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

好问题,看看我发现了什么:

有一个
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\u application.conf
dev\u application.conf
中保留特定于环境的设置(但我没有重新检查
mode
参数的值,因此名称可能不同)

编辑

是的,我只是重新检查了数值。这是:

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

因此,使用这种方法,您可以将conf文件命名为
dev_application.conf
prod_application.conf
test_application.conf
您可以使用
include
语句将设置导入另一个配置文件中:

# Note that the name of the file being included must be quoted
include "common_application.conf"
这将从通用配置导入所有配置条目。然后,您还可以覆盖特定于模式的配置文件中以下任意公共键的值:

common_application.conf dev_application.conf
谢谢1) 你试过这个吗?我读到这可能行不通。2) 你知道如何在任意模式下运行应用程序,比如说“my_super_production”?我必须根据模式指定当前配置文件,我能摆脱它吗?我希望开发模式的默认配置为“my_dev_application.conf”,生产模式的默认配置为“my_prod_application.conf”。除非您使用fork-Play并更改
COnfiguration.scala
,否则我认为您必须指定要在JVM参数中使用的配置文件。也许@serejja的答案是,如果你不喜欢不得不这样做的想法,那么应该采取的方法。
foo=0
# Import common configuration
include "common_application.conf"

# Override common configuration
foo=1

# Dev configuration
bar=0