§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
,但对于大多数常见类型,如 String
、Int
,甚至 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 编程
发现文档中的错误?此页面的源代码可以在 这里 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区进行交流。