Scala 2.12 здесь пытается использовать Lift-JSON для разбора файла конфигурации.У меня есть следующий myapp.json
файл конфигурации:
{
"health" : {
"checkPeriodSeconds" : 10,
"metrics" : {
"stores" : {
"primary" : "INFLUX_DB",
"fallback" : "IN_MEMORY"
}
}
}
}
И следующий MyAppConfig
класс:
case class MyAppConfig()
Мой myapp.json
будет развиваться и потенциально станет очень большим свнутри него много вложенных структур JSON.Я не хочу создать объекты Scala для каждого объекта JSON, а затем вставить это в MyAppConfig
следующим образом:
case class Stores(primary : String, fallback : String)
case class Metrics(stores : Stores)
case class Health(checkPeriodSeconds : Int, metrics : Metrics)
case class MyAppConfig(health : Health)
и т. Д.Причина этого в том, что в итоге я получу « config object sprawl » с десятками и десятками классов case, которые существуют только для удовлетворения сериализации из JSON в Scala-land.
Вместо , я хотел бы использовать Lift-JSON для чтения файла конфигурации myapp.json
, а затем иметь MyAppConfig
просто иметь вспомогательные функции, которые читают / анализируют значения из JSON на лету:
import net.liftweb.json._
// Assume we instantiate MyAppConfig like so:
//
// val json = Source.fromFile(configFilePath)
// val myAppConfig : MyAppConfig = new MyAppConfig(json.mkString)
//
class MyAppConfig(json : String) {
implicit val formats = DefaultFormats
def primaryMetricsStore() : String = {
// Parse "INFLUX_DB" value from health.metrics.stores.primary
}
def checkPeriodSeconds() : Int = {
// Parse 10 value from health.checkPeriodSeconds
}
}
Таким образом, я могу выбрать, какие конфиги я хочу выставить (сделать читабельными) для моего приложения.Я просто не слежу за документацией по Lift API, чтобы увидеть, как эта стратегия возможна, все они, похоже, хотят, чтобы я занялся созданием множества тематических классов. Есть идеи?