Ответ 1
Если я правильно понял ваш вопрос, ответ здесь. Ты можешь сделать
foo: "bar"
foo: ${?FOO}
Как использовать типографскую конфигурацию, как переопределить эталонную конфигурацию переменной среды? Например, допустим, у меня есть следующая конфигурация:
foo: "bar"
Я хочу, чтобы он был переопределен переменной среды FOO
если она существует.
Если я правильно понял ваш вопрос, ответ здесь. Ты можешь сделать
foo: "bar"
foo: ${?FOO}
Официальный документ теперь описывает это очень четко и поддерживает несколько вариантов для этого. Вот краткое резюме...
Наиболее распространенным способом является использование этой формы:
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, как вам угодно, если они не отображаются напрямую в ваши значения конфигурации.
Я использую системное свойство -Dconfig.override_with_env_vars=true
. При этом все свойства автоматически переопределяются через переменные окружения.