Объединение нескольких файлов 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
перед началом объединения ваших конфигураций.