1

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

  • 应用程序.conf
  • 覆盖.dev.conf
  • 覆盖.qa.conf
  • 覆盖.prod.conf

application.modeapplication.conf 文件中有一个属性,该属性将具有 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.confifapplication.mode=dev

  2. 如果我有类似下面的东西不起作用,我想它是文档参考所期望的。

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

    预计上述内容将在名为的文件中包含/覆盖道具override.dev.conf

问题:

  • 这应该是未来的增强还是这是预期的结果?
  • 还有什么其他方法可以实现我想要的?

任何帮助将非常感激。

4

2 回答 2

1

我更喜欢根据当前模式覆盖 PlayFramework 2GlobalSettings.onLoadConfig中所述的加载不同配置。它是在 Scala 中完成的,但也应该可以在 Java 中完成。

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

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

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

于 2013-08-13T11:46:41.413 回答
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项目中的默认值。

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

于 2013-08-10T04:03:02.600 回答