强制pureconfig使用-dconfig.file application.conf文件而不是资源application.conf

我有以下application.conf文件:

# App
tables = [
    "table_1","talbe_2"
]

和以下scala代码:

import pureconfig._
import pureconfig.generic.auto._
import com.typesafe.config.ConfigFactory
import pureconfig.generic.ProductHint

case class Configuration(tables: Array[String])

object Config {
  implicit def hint[A] = ProductHint[A](ConfigFieldMapping(CamelCase,CamelCase))

  val conf = ConfigSource.fromConfig(ConfigFactory.load("application.conf")).load[Configuration] match {
    case Right(conf) => conf
    case Left(failures) => throw new Exception(s"Unable to load the configuration ${failures.toList.mkString("\n")}")
  }
}

并测试application.conf,我有以下代码:

object Test extends App {

  val res = Config.conf.tables
  println("hello")
}

当我将application.conf放到资源文件夹中时,它可以工作。但这在我使用时不起作用

-Dconfig.file=C:/Users/path/to/application.conf

尽管使用了-Dconfig.file参数,它仍使用资源application.conf文件。 你有什么主意吗?

fxangin 回答:强制pureconfig使用-dconfig.file application.conf文件而不是资源application.conf

问题出在电话上

ConfigFactory.load("application.conf")

来自scaladocs

从给定的类路径资源加载应用程序的配置 或类路径资源基本名称,将其夹在默认值之间 引用配置和默认替代,然后对其进行解析。

您必须使用

ConfigFactory.load()

其中

加载默认配置,等效于 加载(defaultApplication())

defaultApplication支持config.file

如果系统属性为config.resource,config.file或config.url 设置,然后在那些指定的类路径资源,文件或URL 将使用属性而不是默认属性 应用程序。{conf,json,properties}类路径资源。

本文链接:https://www.f2er.com/1480695.html

大家都在问