Play框架应用程序中的环境特定配置

时间:2013-12-16 13:02:18

标签: scala playframework playframework-2.0 environment-variables

我已经浏览了一下,但我不清楚如何为Play框架应用程序配置一组特定于环境的变量。

作为一个例子,我想使用像h2这样的内存数据库进行本地开发,但是当我转移到生产环境或我的预生产环境时,我想连接到postgres数据库。

如何配置我的应用,以便它将使用与其部署的环境相关的变量?这是一个Scala Play应用程序。

3 个答案:

答案 0 :(得分:6)

一个选项(如优秀游戏docs中所述)是在app启动期间指定conf文件。

使用-Dconfig.resource将在应用程序类路径中搜索备用配置文件(通常在打包之前将这些备用配置文件提供到应用程序conf /目录中)。播放将调查conf /所以你不必添加conf /.

$ /path/to/bin/<project-name> -Dconfig.resource=prod.conf

使用-Dconfig.file,您可以指定未打包到应用程序工件中的特定于环境的配置文件:

$ start -Dconfig.file=/opt/conf/prod.conf

使用-Dconfig.url您还可以指定要从任何URL加载的配置文件:

$ start -Dconfig.url=http://conf.mycompany.com/conf/prod.conf

请注意,您始终可以使用include指令在新的prod.conf文件中引用原始配置文件,例如:

include "application.conf"

key.to.override=blah

答案 1 :(得分:0)

您可以使用Puppet或一些类似的工具在environment.conf中生成所需的参数并放在专用目录中。

然后在application.conf中,在文件的末尾,有这个:

include "file:///[your directory...]/environment.conf"

覆盖上面列出的任何测试或本地值(例如,DB参数)

答案 2 :(得分:0)

您可以通过覆盖onLoadConfig对象的Global方法来使用不同的配置文件,如:

object Global extends GlobalSettings {
   override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader, mode: Mode.Mode): Configuration = {
    val fileName = s"application.${mode.toString.toLowerCase}.conf"
    config ++ Configuration(ConfigFactory.load(fileName))
  }
}

这样,您可以将“application.test.conf”用于测试模式,将“application.dev.conf”用于开发模式,而您可以通过“-Dconfig.file”参数在生产中使用另一个配置文件。