Play2“include”指令覆盖配置和替换

时间:2013-08-09 23:44:28

标签: java configuration playframework playframework-2.0 playframework-2.1

我在play2.1.0应用程序中有以下conf文件

  • application.conf
  • override.dev.conf
  • override.qa.conf
  • override.prod.conf

application.conf文件中有一个application.mode属性,它有一个dev / qa / prod值。

application.conf还有一行包含env / mode特定的conf文件作为覆盖。这是替代不起作用的。

原因: 要在env / mode特定的conf文件中使用覆盖属性。

简称: http://www.playframework.com/documentation/2.0/Configuration

  

如果某个键开头的未加引号的include后面跟着除了单引号字符串之外的任何内容,则它无效并且应该生成错误。

     

不允许替换,参数可能不是不带引号的字符串或任何其他类型的值。

尝试:

  1. 能够为另一个属性进行替换,但不能为此类include进行替换

    my.prop="override."${?application.mode}".conf"

    如果override.dev.conf

  2. ,则上述输出到application.mode=dev
  3. 如果我有类似下面的东西它不起作用,我想它是根据文档参考的预期。

    include "override."${?application.mode}".conf"

    期望以上内容在名为override.dev.conf

  4. 的文件中包含/覆盖道具

    问题:

    • 这应该是未来的增强还是这是预期的呢?
    • 实现我想要的其他方法有哪些?

    任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

我更喜欢覆盖PlayFramework 2 load different config according to current mode中描述的GlobalSettings.onLoadConfig。它是在Scala中完成的,但也应该可以在Java中完成。

它允许您以非常好的方式重载配置,而无需使用命令行参数启动应用程序,您仍然可以使用play runplay start等启动应用程序。

如果您将override.qa.conf更改为override.test.conf,则应该能够使用此方法,因为qa在Play中不是已知模式。

application.conf中的所有共享设置,然后覆盖其他设置。

答案 1 :(得分:0)

我们想做类似的事情,我们让它发挥作用的唯一方法是扭转它。

在每个环境中,我们都有一个main-config.conf,它具有针对该环境的所有特定配置。基本上,你称之为override.[env].conf。每个文件中的第一行是includes "application.conf",以便在应用程序的默认配置中合并。因此,application.conf具有一般项目配置,其他文件具有特定于环境的内容。

要启动您的应用,您只需告诉它使用特定于环境的配置文件。

play -Dconfig.file=/path/to/main-config.conf start

应用程序将加载main-config.conf,而application.conf又包含项目中的默认build

我们实际上也修改了/framework shell脚本(我相信在{{1}}目录中),所以它总是指定配置文件参数。这样我们就不必在开发时输入它。