文档

§Scala 配置 API

Play 使用 Typesafe 配置库,但 Play 还提供了一个名为 Configuration 的不错的 Scala 包装器,它具有更高级的 Scala 功能。如果您不熟悉 Typesafe 配置,您可能还想阅读有关 配置文件语法和功能 的文档。

§访问配置

通常,您将通过 依赖注入 获取 Configuration 对象,或者简单地将 Configuration 的实例传递给您的组件。

class MyController @Inject() (config: Configuration, c: ControllerComponents) extends AbstractController(c) {
  def getFoo = Action {
    Ok(config.get[String]("foo"))
  }
}

get 方法是您最常使用的。它用于在配置文件中获取某个路径下的单个值。


// foo = bar config.get[String]("foo") // bar = 8 config.get[Int]("bar") // baz = true config.get[Boolean]("baz") // listOfFoos = ["bar", "baz"] config.get[Seq[String]]("listOfFoos")

它接受一个隐式的 ConfigLoader,但对于大多数常见类型,如 StringInt,甚至 Seq[String],都已 定义了加载器,它们可以按预期执行。

Configuration 还支持针对一组有效值进行验证。

config.getAndValidate[String]("foo", Set("bar", "baz"))

§ConfigLoader

通过定义您自己的 ConfigLoader,您可以轻松地将配置转换为自定义类型。这在 Play 内部被广泛使用,并且是为您的配置使用带来更多类型安全性的好方法。例如

case class AppConfig(title: String, baseUri: URI)
object AppConfig {
  implicit val configLoader: ConfigLoader[AppConfig] = new ConfigLoader[AppConfig] {
    def load(rootConfig: Config, path: String): AppConfig = {
      val config = rootConfig.getConfig(path)
      AppConfig(
        title = config.getString("title"),
        baseUri = new URI(config.getString("baseUri"))
      )
    }
  }
}

然后,您可以像上面一样使用 config.get

// app.config = {
//   title = "My App
//   baseUri = "https://example.com/"
// }
config.get[AppConfig]("app.config")

§可选配置键

Play 的 Configuration 支持使用 getOptional[A] 方法获取可选配置键。它的工作原理与 get[A] 相同,但如果键不存在,则返回 None。我们建议您将可选键设置为配置文件中的 null,并使用 get[Option[A]],而不是使用此方法。但是,如果您需要与以非标准方式使用配置的库进行交互,我们提供此方法以方便起见。

下一步:HTTP 编程


发现文档中的错误?此页面的源代码可以在 这里 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区进行交流。