我需要一種方法來配置我的Scala應用程序。 Configgy似乎是Scala的一種選擇,但它已被棄用https://github.com/robey/configgy#readme,現在這個功能在Ostrich中。鴕鳥如何用於配置?
有沒有關於如何使用鴕鳥只用於配置的代碼示例?我對收集統計數據不感興趣。
我需要一種方法來配置我的Scala應用程序。 Configgy似乎是Scala的一種選擇,但它已被棄用https://github.com/robey/configgy#readme,現在這個功能在Ostrich中。鴕鳥如何用於配置?
有沒有關於如何使用鴕鳥只用於配置的代碼示例?我對收集統計數據不感興趣。
我想知道官方的答案,但沒有人回答,所以我決定捅了一圈。對不起,如果這個答案不是很全面。
我發現的最好的例子是在com.twitter.ostrich.admin.RuntimeEnvironment
,特別是如果你看看主要在loadConfig
。
假設你想配置一個T
類的實例。其基本思想如下:
java.io.File
包含Scala源代碼,其計算結果爲com.twitter.util.Config[T]
。Config[T]
您需要有一個def apply(): T
方法。爲了將配置文件中的實現細節保留下來,您需要在項目中定義一個擴展爲Config[T]
的類。您也可以使用此類來定義默認/必填字段。com.twitter.util.Eval
實例,並調用apply(file)
來獲取Config[T]
實例。config.validate()
拋出畸形配置文件的適當例外。config.apply()
即可獲取完全配置的T
實例。舉個簡單的例子,我在那裏配置一個新的WidgetService
:
class WidgetService(val port: Int)
class WidgetConfig extends com.twitter.util.Config[WidgetService] {
var port = required[Int]
def apply(): WidgetService = {
new WidgetService(port)
}
}
object MyApp extends App {
val configFile = new java.io.File("mywidget_config.scala")
val eval = new com.twitter.util.Eval
val config = eval[com.twitter.util.Config[WidgetService]](configFile)
config.validate()
val widgetService = config()
println(widgetService.port)
}
這裏是mywidget_config.scala
:
new WidgetConfig {
port = 8000
}
注意:你可能有,如果你把這個進行修改在一個包裏。爲了簡潔起見,我在默認包中做了所有的事情。
爲了讓依賴上班,我說這個我SBT配置:
libraryDependencies += "com.twitter" % "util" % "1.10.1"
我寫了'Configgy'的替代品。它與大多數傳統配置文件,akka配置文件和java屬性兼容。它可在https://github.com/paradigmatic/Configrity – paradigmatic