gpt4 book ai didi

scala - 如何在运行 sbt 时传递不同的配置文件?

转载 作者:行者123 更新时间:2023-12-01 09:55:53 26 4
gpt4 key购买 nike

在 sbt 中时,是否可以传递不同的配置文件以供使用?

sbt run

这将使用默认配置文件 application.conf

我希望能够在开发过程中在不同的配置文件之间切换,如何在 sbt 内部将其作为参数传递。

最佳答案

您可以使用 -D标志来覆盖您想要在配置文件中的任何特定属性。这从 1.0.1 afaik 版本开始就可用了。例子:
sbt run -D akka.cluster.seed-nodes=["akka.tcp://TestApp@host1:2552", "akka.tcp://TestApp@host2:2552"]
这将替换任何值 application.conf适用于:

akka {
cluster {
seed-nodes = ["", "", /// etc]
}
}

或者,如果您想覆盖整个配置,请执行以下操作:
val runtimeMxBean = ManagementFactory.getRuntimeMXBean
val arguments = runtimeMxBean.getInputArguments.asScala.toList

val config = arguments.find(_.contains("config.path")) match {
case Some(value) => {
val opt = value.split("=")
if (Files.exists(opt.last)) {
ConfigFactory.load(opt.last)
} else {
ConfigFactory.load("application.conf")
}
case None => ConfigFactory.load("application.conf")
}
  • 使用 -D 传递文件路径来做你的配置文件,例如 config.path=... .
  • 加载配置时,您需要执行一些操作,例如检查是否提供了指定文件路径的运行时参数,检查文件是否存在,然后加载该文件。

  • 更新:选项 3:使用 config.resource
    您可以使用 -Dconfig.resource=filepath 覆盖整个配置文件,如果您需要加载一个完全独立的。

    选项 4

    您还可以使用环境变量覆盖配置选项的特定值。它看起来像这样:
    database {
    host = "localhost"
    host = ${?DATABASE_HOST}
    }

    这意味着如果 DATABASE_HOST env 变量已设置,其值将用于覆盖任何 application.conf已经持有该键。

    关于scala - 如何在运行 sbt 时传递不同的配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38805686/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com