Получение списка объектов из application.conf - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующая запись в Play для Scala application.conf:

    jobs = [
       {number: 0, dir: "/dir1", name: "General" },
       {number: 1, dir: "/dir2", name: "Customers" }
    ] 

Я хочу получить этот список объектов в программе Scala:

    val conf = ConfigFactory.load
    val jobs = conf.getAnyRefList("jobs").asScala 
    println(jobs)

this print

Buffer({number=0, name=General, dir=/dir1}, {number=1, name=Customers, dir=/dir2})

Но как преобразовать результат в реальные объекты Scala?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вот объект Config, который извлечет данные из файла конфигурации в указанный вами тип.

Использование:

case class Job(number: Int, dir: String, name: String)

val jobs = Config[List[Job]]("jobs")

Код:

import com.typesafe.config._
import org.json4s._
import org.json4s.jackson.JsonMethods._

object Config {
  private val conf = ConfigFactory.load()
  private val jData = parse(conf.root.render(ConfigRenderOptions.concise))

  def apply[T](name: String)(implicit formats: Formats = DefaultFormats, mf: Manifest[T]): T =
    Extraction.extract(jData \\ name)(formats, mf)
}

Это вызовет исключение, если конкретный объект конфигурации не существует или не соответствует формату T.

0 голосов
/ 12 декабря 2018

Попробуйте это:

case class Job(number: Int, dir: String, name: String)

object Job {
implicit val configLoader: ConfigLoader[List[Job]] = ConfigLoader(_.getConfigList).map(
    _.asScala.toList.map(config =>
      Job(
        config.getInt("number"),
        config.getString("dir"),
        config.getString("name")
      )
    )
  )
}

Затем из конфигурации DI Configuration.get[List[Job]]("jobs")

...