我有一个具有以下配置的项目
Commons.conf
Application.conf
进行开发Production.conf
生产 application.conf
和production.conf
都包含commons.conf
我必须使用dist任务构建应用程序来生成zip文件,然后使用提供的projectname.bat
文件启动它。
我在build.sbt中添加了javaOptions ++= Seq("-Dconfig.file=conf/production.conf")
,但似乎无效。我无法在命令行上启动应用程序,因为我确实希望它自动完成。为开发和生产单独.conf
文件配置的更好方法是什么?dist
任务是生产生产的?
答案 0 :(得分:8)
在启动应用程序时,Play会自动配置为从类路径加载application.conf
。要使用替代方法覆盖此选项,您需要在启动时指定它。
请注意,无论您是部署到Windows并使用.bat
启动应用程序,还是使用.sh
启动Linux,您通常都会按如下方式执行该文件: -
$ target/universal/stage/bin/<project-name>
以上内容将执行您的.bat
文件(如果您使用的是Microsoft)。
因此,如果您想为prod / dev提供单独的配置文件,请使用dev的默认application.conf
并使用production.conf
作为产品。
如果您将application.conf
放在conf
内,那么您可以按如下方式指定: -
$ /path/to/bin/<project-name> -Dconfig.resource=production.conf
如果您的应用未附带application.conf
(即您尚未将其放入conf
,那么您需要使用指定完整路径。
$ target/universal/stage/bin/<project-name> -Dconfig.file=/full/path/to/conf/production.conf
在application.conf
中加入prod.conf
,然后覆盖prod所需的内容
请注意,您可以在另一个中包含配置,因此我通常会指定prod.conf
,如下所示: -
include "application.conf"
key.to.override=blah
然后在启动应用时指定prod.conf
,系统会自动包含application.conf
。然后,您可以在prod.conf
中指定覆盖生产环境的application.conf
中的属性。
并非您也可以使用系统属性和环境变量覆盖application.conf
中的设置。我建议您花一些时间阅读the docs以更全面地了解这些选项。
答案 1 :(得分:2)
你可以用两种方式做到:
$ <path_to_your_executable_file> -Dconfig.resource=<name_of_your_conf_file>
这将在应用程序类路径中搜索配置文件,并且在打包之前所有这些文件都应该在conf
目录中。
$ <path_to_your_executable_file> -Dconfig.file=<path_to_your_conf_file>
如果您查看zip文件的内容,您将看到bin
和conf
目录。 bin
包含可执行文件,conf
包含配置文件。请注意,配置文件是单独打包的。
答案 2 :(得分:0)
在Play Framework 2.5.x中,您可以使用sbt
命令运行项目,指定配置文件:
$ sbt '; set javaOptions += "-Dconfig.file=conf/integration.conf"; run'
您可以启动测试:
$ sbt '; set javaOptions += "-Dconfig.file=conf/integration.conf"; test'
或使用testOnly
:
$ sbt '; set javaOptions += "-Dconfig.file=conf/integration.conf"; testOnly Integration*'
答案 3 :(得分:0)
如果您正在使用激活器,则使用:激活器运行-Dconfig.file = conf / auxiliary.conf
如果您正在使用sbt,则使用:sbt';设置javaOptions + =“ -Dconfig.file = conf / auxiliary.conf”;跑