Переопределение конфигурации с переменными среды в config config

Как использовать типографскую конфигурацию, как переопределить эталонную конфигурацию переменной среды? Например, допустим, у меня есть следующая конфигурация:

foo: "bar"

Я хочу, чтобы он был переопределен переменной среды FOO если она существует.

Ответ 1

Если я правильно понял ваш вопрос, ответ здесь. Ты можешь сделать

foo: "bar"
foo: ${?FOO}

Ответ 2

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

Наиболее распространенным способом является использование этой формы:

basedir = "/whatever/whatever"
basedir = ${?FORCED_BASEDIR}

Если переменная env установлена, то она переопределит ваше значение по умолчанию, в противном случае она останется без изменений.

Более удобный способ - использовать свойство JVM -Dconfig.override_with_env_vars=true чтобы переопределить любую переменную конфигурации. В этом случае вам не нужно создавать дубликаты объявлений. Переменные env должны быть названы с префиксом CONFIG_FORCE_. Посмотрите, как env var to config name mapping работает в документации. В качестве примера: CONFIG_FORCE_a_b__c___d будет сопоставлен с ab-c_d.

Наконец, если вы хотите развернуть свое собственное отображение, которое похоже на опцию, описанную выше, без использования override_with_env_vars вы можете использовать взлом оболочки, как описано ниже.

Если вам нужно использовать переменные среды и если их имена соответствуют именам конфигурации, вы можете использовать такой скрипт bash, чтобы автоматически конвертировать из вашей среды переменные в аргументы cmd JVM. Эти -D JVM-аргументы переопределяют значения Typesafe Config. Пример:

# export my_PROP1=1
# export my_PROP2=2
#
# props=$(env | grep my_ | awk '{print "-D"$_}' ORS=' ')
#
# echo "JVM executable command is: java $props some.jar"
JVM executable command is: java -Dmy_PROP2=2 -Dmy_PROP1=1  some.jar

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

Ответ 3

Я использую системное свойство -Dconfig.override_with_env_vars=true. При этом все свойства автоматически переопределяются через переменные окружения.