scala - ¿Cómo se usa el avestruz para la configuración?
configuration ostrich (1)
También me gustaría saber la respuesta oficial, pero nadie respondió, así que decidí hurgarme. Lo siento si esta respuesta no es muy completa.
El mejor ejemplo que encontré fue en com.twitter.ostrich.admin.RuntimeEnvironment
, especialmente si nos fijamos principalmente en loadConfig
.
Digamos que quieres configurar una instancia de la clase T
La idea básica es la siguiente:
- Obtenga un
java.io.File
que contiene el código fuente de Scala que se evalúa comocom.twitter.util.Config[T]
. - Para ser una
Config[T]
válidaConfig[T]
, deberá tener un métododef apply(): T
Para mantener los detalles de la implementación fuera del archivo de configuración, querrá definir una clase en su proyecto que extiendaConfig[T]
. También puede usar esta clase para definir los campos predeterminados / requeridos. - Cree una nueva instancia de
com.twitter.util.Eval
y llame aapply(file)
para obtener una instancia deConfig[T]
. - Llame a
config.validate()
para lanzar las excepciones apropiadas para los archivos de configuración mal formados. - Llame a
config.apply()
para obtener su instancia totalmente configurada deT
Aquí hay un ejemplo simple, donde configuro un nuevo 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)
}
Y aquí está mywidget_config.scala
:
new WidgetConfig {
port = 8000
}
Nota: es posible que tenga que hacer modificaciones si coloca esto en un paquete. Hice todo en el paquete por defecto para la brevedad.
Para hacer que funcionen las dependencias, agregué esto a mi configuración SBT:
libraryDependencies += "com.twitter" % "util" % "1.10.1"
Necesito una forma de configurar mi aplicación scala. Configgy parecía ser el camino a seguir en Scala pero está obsoleto https://github.com/robey/configgy#readme y ahora esta funcionalidad está en Ostrich.
¿Hay un ejemplo de código sobre cómo usar Ostrich solo para configuración? No estoy interesado en recoger las estadísticas.