Ответ 1
кто-то создал пакет для DW, чтобы иметь возможность вставлять env vars
Я разместил этот вопрос в списке рассылки dw, но не получил ответа.
Можно ли предположить, что формат YML ниже не работает для DW 0.7.0? (Использование @ char для вставки env var)
server:
applicationConnectors:
- type: http
bindHost: @[email protected]
port: @[email protected]
Ошибка:
Неправильный YAML в строке: 28, столбец: 17; при сканировании следующего токена; найденный символ @'@', который не может запустить какой-либо токен. (Не используйте @для отступов); в "читателе", строка 28, столбец 17: bindHost: @OPENSHIFT_DIY_IP @
Поэтому я решил использовать этот формат:
server:
type: simple
applicationContextPath: /
adminContextPath: /admin
connector:
type: http
bindHost: localhost
port: 8080
И попытался переопределить его с помощью jvm-опций:
java -Ddw.server.connector.bindHost=$OPENSHIFT_DIY_IP -Ddw.server.connector.port=$OPENSHIFT_DIY_PORT -jar target/myapp.jar server myapp.yml
Мои локальные переменные env:
OPENSHIFT_DIY_IP=localhost
OPENSHIFT_DIY_PORT=8080
Ошибка, полученная из этой настройки:
Исключение в потоке "main" java.lang.RuntimeException: java.net.SocketException: неразрешенный адрес на org.eclipse.jetty.setuid.SetUIDListener.lifeCycleStarting(SetUIDListener.java:213) ... Вызвано: java.net.SocketException: неразрешенный адрес at sun.nio.ch.Net.translateToSocketException(Net.java:157) ... WARN [2014-05-03 20: 11:19,412] org.eclipse.jetty.util.component.AbstractLifeCycle: FAILED [email protected]: java.lang.RuntimeException: java.net.SocketException: Неразрешенный адрес
Что я делаю неправильно?
кто-то создал пакет для DW, чтобы иметь возможность вставлять env vars
Начиная с версии Dropwizard 0.8.0, вы можете получить доступ к переменным среды из файла конфигурации yml. Он также поддерживает установку значения по умолчанию, если переменная среды недоступна. Смотрите документы здесь.
Пример
// put environment variable inside ${}
// use :- operator to provide default value
dbHost: ${DB_HOST}
dbPort: ${DB_PORT:-1234}
// dbPort = 1234, if DB_PORT environment variable has no value
Важное примечание. Для этого вам нужно настроить SubstitutingSourceProvider
с помощью EnvironmentVariableSubstitutor
.
// Enable variable substitution with environment variables
bootstrap.setConfigurationSourceProvider(
new SubstitutingSourceProvider(
bootstrap.getConfigurationSourceProvider(),
new EnvironmentVariableSubstitutor())
);
Обновление: 15/ноябрь/2017
Как упоминалось в разделе комментариев в разделе @EFreak, new EnvironmentVariableSubstitutor()
будет бросать UndefinedEnvironmentVariableException
, если переменная окружения не определена, если вы не установите для режима strict
значение false
с помощью new EnvironmentVariableSubstitutor(false)
https://github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java