Объединить значения массива в конфигурации, используя withFallBack в типизированной конфигурации - PullRequest
0 голосов
/ 17 марта 2020

У меня есть некоторые данные в виде безопасных файлов конфигурации в формате HOCON.

Существует такой базовый файл:

"data":{
  "k1":{
    "values": ["v1", "v2"]
  },
  "k2":{
    "values": ["x1"]
  },
  "k3":{
    "values": ["z1"]
  }
}

Может быть файл, который можно использовать для внесения некоторых изменений, например, во время теста, например:

"data":{
  "k1":{
    "values": ["v9"]
  }
}

Я пытаюсь объединить эти два файла, используя

fileConfig.withFallback (baseFileConfig)

Конечный результат:

"data":{
  "k1":{
    "values": ["v9"]  // desired ["v1","v2","v9"]
  },
  "k2":{
    "values": ["x1"]
  },
  "k3":{
    "values": ["z1"]
  }
}

т.е. значения массива для "k1" из конфигурации fallBack игнорируются. Есть ли способ получить объединенный массив из двух файлов после слияния?

1 Ответ

1 голос
/ 19 марта 2020

для этого вам нужно добавить ref для конкатенации значений (values: ${data.k1.values} ["v9"]):

lazy val defaultConfig     = ConfigFactory.parseResources("a.conf")
lazy val additionalConfig = ConfigFactory.parseResources("b.conf" )
println(additionalConfig.withFallback(defaultConfig).resolve()) 
// Config(SimpleConfigObject({"data":{"k1":{"values":["v1","v2","v9"]},"k2":{"values":["x1"]},"k3":{"values":["z1"]}}}))

конфиги:

defaultConfig

data: {
  k1: {
    values: ["v1", "v2"]
  },
  k2: {
    "values": [
      "x1"
    ]
  },
  k3: {
    "values": [
      "z1"
    ]
  }
}

AdditionalConfig:

data: {
  k1: {
    values: ${data.k1.values} ["v9"]
  }
}
...