Другая стратегия, которую я использую, состоит из использования includes. Обычно я храню настройки DEV в файле defaultapplication.conf
, затем создаю новый файл conf для других сред и включаю по умолчанию.
Скажем, мой DEV конф application.conf
выглядит следующим образом:
myapp {
server-address = "localhost"
server-port = 9000
some-other-setting = "cool !"
}
Тогда для PROD, я мог бы еще один файл с именем prod.conf
:
include "application"
# override default (DEV) settings
myapp {
server-address = ${PROD_SERVER_HOSTNAME}
server-port = ${PROD_SERVER_PORT}
}
Обратите внимание, что я переопределить только настройки что изменение в среде PROD (some-other-setting
является таким же, как в DEV).
Код конфигурации начальной загрузки ничего
...
val conf = ConfigFactory.load()
...
Для переключения из DEV в PROD конф не тест, просто передать системное свойство с именем конфигурационного файла для загрузки:
java -Dconfig.resource=prod.conf ...
В DEV, нет необходимости передавать его с application.conf
будет загружен default.
Таким образом, для этого мы используем механизм загрузки по умолчанию .
Я создал простой project, чтобы продемонстрировать эту технику. Не стесняйтесь клонировать и экспериментировать.
Мне понадобилось некоторое время, чтобы найти этот шаблон, который поддерживает первичность свойств системы: ConfigFactory.defaultOverrides(). WithFallback (config2.getConfig (среда)). WithFallback (config2); https://github.com/typesafehub/config/blob/master/examples/java/complex-app/src/main/java/ComplexApp.java –