Ostrich如何用于配置?

ton*_*ian 16 configuration scala ostrich

我需要一种方法来配置我的scala应用程序.Configgy似乎是Scala的方式,但它已被弃用https://github.com/robey/configgy#readme,现在这个功能在Ostrich中.

是否有关于如何仅将Ostrich用于配置的代码示例?我对收集统计数据不感兴趣.

Mik*_*ike 14

我也想知道官方的答案,但没有人回答,所以我决定四处寻找.对不起,如果这个答案不是很全面.

我找到的最好的例子是com.twitter.ostrich.admin.RuntimeEnvironment,特别是如果你主要看的话loadConfig.

假设您要配置类的实例T.基本思路如下:

  • 获取java.io.File包含评估为a的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)
}
Run Code Online (Sandbox Code Playgroud)

这是mywidget_config.scala:

new WidgetConfig {
  port = 8000
}
Run Code Online (Sandbox Code Playgroud)

注意:如果将其放入包装中,则可能需要进行修改.为简洁起见,我在默认包中做了所有事情.

为了使依赖项工作,我将其添加到我的SBT配置:

libraryDependencies += "com.twitter" % "util" % "1.10.1"
Run Code Online (Sandbox Code Playgroud)

  • 看起来很复杂 (3认同)