Me gustaría saber la respuesta oficial también, pero nadie respondió, así que decidí hurgar. Lo siento si esta respuesta no es completa.
El mejor ejemplo que encontré fue en com.twitter.ostrich.admin.RuntimeEnvironment
, especialmente si mira principalmente en loadConfig
.
Supongamos que quiere configurar una instancia de la clase T
. La idea básica es la siguiente:
- Obtener una
java.io.File
que contiene el código fuente de Scala que se evalúa como un com.twitter.util.Config[T]
.
- Para ser un
Config[T]
válido, necesitará tener un método def apply(): T
. Para mantener los detalles de implementación fuera del archivo de configuración, querrá definir una clase en su proyecto que extienda Config[T]
. También puede usar esta clase para definir los campos predeterminados/requeridos.
- Crea una instancia nueva de
com.twitter.util.Eval
y llama al apply(file)
para obtener una instancia de Config[T]
.
- Llame al
config.validate()
para arrojar las excepciones adecuadas para los archivos de configuración mal formados.
- Llame al
config.apply()
para obtener su instancia totalmente configurada de T
.
Aquí está un ejemplo sencillo, en el que se configura 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í es mywidget_config.scala
:
new WidgetConfig {
port = 8000
}
Nota: puede que tenga que hacer modificaciones si se pone este en un paquete Hice todo en el paquete predeterminado para abreviar.
Para obtener las dependencias para trabajar, he añadido esto a mi config SBT:
libraryDependencies += "com.twitter" % "util" % "1.10.1"
me escribió un reemplazo para 'Configgy'. Es compatible con la mayoría de los archivos de configuración heredados, archivos de configuración akka y propiedades de Java. Está disponible en https://github.com/paradigmatic/Configrity – paradigmatic