объединение нескольких уровней конфигурации с использованием конфигурации typesafe/akka

Я просматриваю: https://github.com/typesafehub/config

Допустим, я хочу иметь конфигурацию по умолчанию, например. reference.conf, а затем я хочу иметь переопределения dev/prod (два разных application.conf), а затем я также хотел иметь переопределения для конкретного хоста, которые унаследованы как от application.conf, так и от reference.conf по умолчанию. Как бы я это сделал?

например, я представляю структуру каталогов примерно так:

resources/reference.conf
resources/prod/application.conf
resources/prod/master.conf
resources/prod/slave.conf
resources/dev/application.conf
resources/dev/master.conf
resources/dev/slave.conf

Или, может быть, это resources/dev/master/application.conf?

Где-то я бы указал среду, т.е., возможно, извлеченную из имени хоста, на котором было запущено приложение.

Если приложение было master.dev.example.com, я ожидаю, что смогу сделать что-то вроде:

getConfigurations("dev/master.conf").withDefaultsFrom(
    getConfigurations("dev/application.conf").withDefaultsFrom(
        getConfigurations("resource.conf"))

Но мне трудно понять, как именно это будет выглядеть с использованием данной библиотеки.

Я вижу, что могу установить системное свойство config.resource, но похоже, что это позволит только один уровень переопределений, dev-application.conf -> resources.conf, а не что-то вроде master-node.conf -> dev-application .conf -> ресурсы.conf.

Я вижу метод .withFallback, но это, кажется, если бы я хотел смешать два типа конфигурации в одном файле, а не объединять ресурсы/файлы вместе.


person nairbv    schedule 18.10.2015    source источник


Ответы (1)


Используйте несколько withFallback с конфигами, которые имеют наивысший приоритет. Например:

Config finalConfig = 
  ConfigFactory.systemProperties().
    withFallback(masterConfig).
    withFallback(applicationConfig).
    withFallback(referenceConfig)

Каждая из конфигураций, таких как masterConfig, была бы загружена с Config.parseFile. Вы также можете использовать ConfigFactor.load для удобства, но методы parseXXX дают вам больше контроля над вашей иерархией.

person sourcedelica    schedule 18.10.2015