Объединение нескольких файлов ConfigSafe Config и разрешение только после их объединения

Я пишу тестовый код для проверки службы RESTful. Я хочу иметь возможность указать его в любой из наших разных сред, просто изменив переменную среды перед выполнением тестов.

Я хочу иметь возможность объединить три разных файла конфигурации:

  • conf/env/default.conf - значения конфигурации по умолчанию для всех сред
  • conf/env/<env>.conf - значения, зависящие от среды
  • application.conf - пользователь переопределяет любой из вышеперечисленных

Идея заключается в том, что я не хочу, чтобы все было в одном файле конфигурации, и рискуя получить плохое редактирование, в результате чего элементы конфигурации теряются. Поэтому вместо этого сохраните их отдельно и дайте пользователю возможность переопределить их.

Здесь, где это становится сложно: default.conf будет включать в себя $ {ссылки} вещи, которые должны быть переопределены в <env>.conf, и могут быть дополнительно переопределены в application.conf.

Мне нужно отложить разрешение до тех пор, пока все три не будут объединены. Как мне это сделать?

Ответ 1

Ответ заключается в использовании ConfigFactory.parseResource() вместо ConfigFactory.load().

Вот законченный результат

private lazy val defaultConfig     = ConfigFactory.parseResources("conf/env/default.conf")
private lazy val environmentConfig = ConfigFactory.parseResources("conf/env/" + env + ".conf" )
private lazy val userConfig        = ConfigFactory.parseResources("application.conf")
private lazy val config = userConfig
                          .withFallback(environmentConfig)
                          .withFallback(defaultConfig)
                          .resolve()

Ответ 2

Я дал большой палец, чтобы Джон ответил, и его стоит сослаться

https://github.com/lightbend/config#standard-behavior

перед началом объединения ваших конфигураций.