我决定用play2尝试scala。我试图以某种方式从应用程序配置中获取配置部分。它看起来像这样(按部分我的意思是整个邮件部分)
services: {
rest: {
mail: {
uri: "xyz",
authorization: {
username: "xyz",
password: "xyz"
}
}
}
}
代码
import com.typesafe.config.ConfigObject
import play.api.Play.current
val config: Option[ConfigObject] = current.configuration.getObject("services.rest.mail")
这会给Some(SimpleConfigObject())
提供mail
和唯一的方法,我能够真正获得ConfigObject
部分,并将其用作config.get.toConfig.getString("uri")
是低谷
config.get.get("uri").unwrapped().toString
或者我可以用
获得实际值config.get.toConfig.getObject("authorization").toConfig.getString("username")
或者为了好玩:
{{1}}
无论哪种方式,在我看来,我这样做过于复杂。有没有更简单的方法从配置中获取一个部分?
答案 0 :(得分:1)
由于配置库有一个Java API,因此从Scala中使用它会感觉有点冗长。虽然有一些Scala包装器可以实现更紧凑的语法。请参阅https://github.com/typesafehub/config#scala-wrappers-for-the-java-library。
答案 1 :(得分:0)
我会将此作为回答以供将来参考。
在玩了代码之后,我发现了parseResourcesAnySyntax
方法,它完全符合我的要求,因为我的配置分为多个部分,用于不同的环境(application.dev.conf等)我可以简单地做到
import com.typesafe.config.{Config, ConfigFactory}
import play.api.Play._
val config: Config = ConfigFactory.parseResourcesAnySyntax("application.%s.conf" format current.mode)
然后使用
config.getString("uri")
// or
config.getString("authorization.username")
// or if I want to use part of it as another section
val section: Config = config.getConfig("authorization")
section.getString("username")
当然,另一个可行的选择是使用包装作为Stebel推荐的先生。