Scala - play2配置获取部分

时间:2015-02-03 23:41:37

标签: scala playframework-2.0 typesafe typesafe-config

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

无论哪种方式,在我看来,我这样做过于复杂。有没有更简单的方法从配置中获取一个部分?

2 个答案:

答案 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推荐的先生。