【问题标题】:Play - How to use different configuration files for Dev/Prod?Play - 如何为 Dev/Prod 使用不同的配置文件?
【发布时间】:2017-04-21 06:34:17
【问题描述】:

我有一个项目,配置如下

  • Commons.conf
  • Application.conf 用于开发
  • Production.conf 用于生产

application.confproduction.conf 都包括 commons.conf

我必须使用 dist 任务构建应用程序以生成 zip 文件,然后使用提供的 projectname.bat 文件启动它。

我在 build.sbt 中添加了javaOptions ++= Seq("-Dconfig.file=conf/production.conf"),但似乎没有用。我无法在命令行上启动应用程序,因为我确实希望它自动完成。为开发和生产单独配置 .conf 文件并让 dist 任务承担生产任务的更好方法是什么?

【问题讨论】:

  • “我无法在命令行上启动应用程序,因为我确实希望它自动完成” - 你能定义什么是“自动”吗?
  • 双击自动启动JVM的bat脚本。将参数传递给 JVM 的唯一方法似乎是在第 127 行编辑 .bat 本身,在 set _JAVA_OPTS=!_JAVA_OPTS! !_JAVA_PARAMS! 之后添加它
  • 您需要研究如何在命令行上执行 bat 文件 - 这对您来说是更好的做法,因为您可能需要在职业生涯的某个阶段部署到远程计算机(无论是它是 windows 或 *nix) 并且需要使用命令行。

标签: scala playframework playframework-2.0 sbt


【解决方案1】:

在您的应用程序启动时,Play 会自动配置为从类路径加载 application.conf。要使用替代方法覆盖它,您需要在启动时指定它。

请注意,无论您是部署到 Windows 并使用 .bat 启动应用程序,还是使用 .sh 启动 Linux,您通常都按如下方式执行该文件:-

$ target/universal/stage/bin/<project-name>

以上将执行您的.bat 文件(如果您在 Microsoft 上)。

指定替代配置文件(几个选项)

因此,如果您想为 prod/dev 提供单独的配置文件,请为 dev 使用默认的 application.conf,为 prod 使用 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 中包含application.conf 并覆盖您需要的产品 请注意,您可以将配置包含在另一个内部,所以我通常会指定一个 prod.conf,如下所示:-

include "application.conf"

key.to.override=blah

然后在启动应用程序时指定prod.confapplication.conf 将自动包含在内。然后,您可以为您的生产环境指定 prod.conf 中覆盖 application.conf 中的属性的属性。

更多

并不是说您也可以使用系统属性和环境变量来覆盖application.conf 中的设置。我鼓励您花一些时间阅读 the docs 以更全面地了解这些选项。

【讨论】:

    【解决方案2】:

    你可以通过两种方式做到这一点:

    1. 如果您的包中包含配置文件:

    $ &lt;path_to_your_executable_file&gt; -Dconfig.resource=&lt;name_of_your_conf_file&gt;

    这将在应用程序类路径中搜索配置文件,并且所有这些文件在打包之前都应该在conf目录下。

    1. 如果您想提供一个未与应用程序打包的完全替代文件:

    $ &lt;path_to_your_executable_file&gt; -Dconfig.file=&lt;path_to_your_conf_file&gt;

    如果您查看 zip 文件的内容,您会看到 binconf 目录。 bin 包含可执行文件,conf 包含配置文件。所以注意配置文件是单独打包的。

    【讨论】:

      【解决方案3】:

      在 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*'

      【讨论】:

        【解决方案4】:

        如果您使用的是激活器,请使用:激活器运行 -Dconfig.file=conf/auxiliary.conf

        如果您使用的是 sbt,请使用: sbt ';设置 javaOptions += "-Dconfig.file=conf/auxiliary.conf";运行'

        【讨论】:

          猜你喜欢
          • 2011-11-03
          • 2019-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-16
          • 2018-06-18
          • 2012-06-02
          相关资源
          最近更新 更多