Scala - play2 配置获取部分

Scala - play2 config get section

我决定用 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")

不管怎样,在我看来,我做的太复杂了。有没有更简单的方法从配置中获取部分?

由于配置库有一个 Java API,在 Scala 中使用它会感觉有点冗长。尽管有一些 Scala 包装器可以实现更紧凑的语法。参见 https://github.com/typesafehub/config#scala-wrappers-for-the-java-library

我会post将此作为答案以备将来参考。

在又一次使用代码后,我发现 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 先生推荐的包装器。