正在从 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
的格式,这将引发异常。
我在 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
的格式,这将引发异常。