正在从 application.conf 中检索对象列表

Retrieving list of objects from application.conf

我在 Play for 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)

这会打印

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

但是如何将结果转换为实际的 Scala 对象?

试试这个:

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")
      )
    )
  )
}

然后来自Confugutation DI Configuration.get[List[Job]]("jobs")

这是一个 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 的格式,这将引发异常。