Не удалось получить доступ к конфигурации среды Heroku в файле конфигурации dropwizard yaml

Я реализовал простой REST API с помощью Dropwizard и попытался запустить его на Heroku. Я застрял в точке, где хочу получить доступ к базе данных postgresql на Heroku. Я не могу получить доступ к конфигурации на Heroku. У меня есть конфигурационные вары, установленные на героку, как показано ниже:

 $ heroku config
 HEROKU_DATABASE_URL:<some value>
 HEROKU_DATABASE_USERNAME:<some value>
 HEROKU_DATABASE_PASSWORD:<some value>

Я обращаюсь к ним в своем приложении dropwizard вместе с другими настройками конфигурации в config.yml как:

database:
  driverClass: org.postgresql.Driver
  user: HEROKU_DATABASE_USERNAME
  password: HEROKU_DATABASE_PASSWORD
  url: jdbc:postgresql:HEROKU_DATABASE_URL

Я также пробовал:

System.getenv("HEROKU_DATABASE_USERNAME")

Но ни один из них не работает.

Если я заменяю фактическими значениями, моя служба работает.

Может ли кто-нибудь указать мне правильный способ разрешения/доступа к настройкам конфигурации из героку?


person t4t    schedule 08.08.2013    source источник


Ответы (2)


Dropwizard также позволяет передавать параметры конфигурации в командной строке с флагами -D (см. примечание здесь), поэтому в вашем Procfile вы можете запустить свой сервер с java -Ddw.database.user=$HEROKU_DATABASE_USERNAME ... -jar app.jar server, чтобы использовать переменные среды.

person Michael Fairley    schedule 08.08.2013
comment
Спасибо, да, я могу передать параметры конфигурации, используя -D, который работает. Но я бы предпочел конфигурацию yaml. - person t4t; 09.08.2013

Я написал небольшую надстройку для dropwizard, которая позволяет вам ссылаться на переменные среды в вашем файле config.yml. Вы можете найти его здесь. Он работает, указав $env:ENVIRONMENT_VARIABLE[:DEFAULT_VALUE] в качестве значения для элементов массива или полей объекта в вашем файле yaml.

person Thomas Krille    schedule 26.07.2014
comment
tkrille Глядя на ваше дополнение, как вы получаете доступ к свойствам в файле YAML из кода Java? - person BSB; 05.11.2014
comment
@BSB, вы можете получить свойства обычными способами, то есть просто получить их из экземпляра конфигурации вашего приложения. единственное, что делает мой аддон, это анализирует все $env:... до замены системных свойств. см. также здесь. - person Thomas Krille; 14.11.2014