我在play2.1.0应用程序中有以下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
后面跟着除了单引号字符串之外的任何内容,则它无效并且应该生成错误。不允许替换,参数可能不是不带引号的字符串或任何其他类型的值。
尝试:
能够为另一个属性进行替换,但不能为此类include
进行替换
my.prop="override."${?application.mode}".conf"
如果override.dev.conf
application.mode=dev
如果我有类似下面的东西它不起作用,我想它是根据文档参考的预期。
include "override."${?application.mode}".conf"
期望以上内容在名为override.dev.conf
问题:
任何帮助都会非常感激。
答案 0 :(得分:1)
我更喜欢覆盖PlayFramework 2 load different config according to current mode中描述的GlobalSettings.onLoadConfig
。它是在Scala中完成的,但也应该可以在Java中完成。
它允许您以非常好的方式重载配置,而无需使用命令行参数启动应用程序,您仍然可以使用play run
,play 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}}目录中),所以它总是指定配置文件参数。这样我们就不必在开发时输入它。