文件

§Scala 組態 API

Play 使用 Typesafe config 函式庫,但 Play 也提供一個名為 Configuration 的友善 Scala 封裝,它具有更進階的 Scala 功能。如果您不熟悉 Typesafe config,您可能也想閱讀 組態檔語法和功能 的文件。

§存取組態

通常,您會透過 依賴注入取得一個 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 編程


在此文件檔中發現錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件檔指南 後,請隨時提出 pull request。有問題或建議想分享?請前往 我們的社群論壇 與社群展開對話。