您可以使用-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 环境变量,它的值将用于覆盖 application.conf 已经为该键保存的任何内容。