заставить pureconfig использовать файл -dconfig.file application.conf, а не ресурс application.conf

У меня есть следующий файл application.conf:

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

и следующий скала-код:

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

Он использует файл application.conf ресурсов, несмотря на тот, что указан в аргументе -Dconfig.file. Есть ли у вас какие-либо идеи?


person a.moussa    schedule 29.09.2020    source источник


Ответы (1)


Проблема в звонке

ConfigFactory.load("application.conf")

Из скаладоков

Загружает конфигурацию приложения из заданного ресурса пути к классам или базового имени ресурса пути к классам, помещает ее между эталонной конфигурацией по умолчанию и переопределениями по умолчанию, а затем разрешает ее.

Вы должны использовать

ConfigFactory.load()

который

Загружает конфигурацию по умолчанию, эквивалентную load(defaultApplication())

А defaultApplication поддерживает config.file

Если установлены системные свойства config.resource, config.file или config.url, то ресурс пути к классам, файл или URL-адрес, указанные в этих свойствах, будут использоваться, а не приложение по умолчанию.{conf,json,properties} ресурсы пути к классам .

person Ivan Stanislavciuc    schedule 29.09.2020