【问题标题】:Dealing with the same setting in different config files处理不同配置文件中的相同设置
【发布时间】:2014-03-15 04:33:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: scala playframework config playframework-2.2


    【解决方案1】:

    您可以通过使用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
    

    【讨论】:

    • 我必须始终根据模式指定当前配置文件,我可以摆脱这个吗?我希望开发模式的默认配置为“my_dev_application.conf”,生产模式为“my_prod_application.conf”。
    • 除非您 fork Play 并更改 COnfiguration.scala 的内部结构,否则我认为您必须指定要在 JVM 参数中使用的配置文件。如果您不喜欢必须这样做的想法,也许@serejja 的答案是采取的方法。
    【解决方案2】:

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

    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.confdev_application.conf 中(但我没有重新检查mode 参数的值,因此名称可能不同)

    编辑

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

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

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

    【讨论】:

    • 谢谢。 1)你试过这个吗?我读到这可能行不通。 2) 你知道如何在任意模式下运行应用程序,比如“my_super_production”吗?
    猜你喜欢
    • 2020-07-16
    • 2016-03-15
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多