2016-10-05 4 views
1

MyWebConfiguration.java Есть следующий код, как мастера падения описаноIssue в наиважнейшей конфигурации с ENV переменных в dropwizard

public void initialize(Bootstrap<MyWebConfiguration> bootstrap) { 
    LOG.info("Initializing configuration"); 
    // Enable variable substitution with environment variables 
    bootstrap.setConfigurationSourceProvider(
     new SubstitutingSourceProvider(
      bootstrap.getConfigurationSourceProvider(), 
      new EnvironmentVariableSubstitutor(false) 
     ) 
    ); 
} 

DEV-services.yaml файл имеет

tokenSecret: ${TOKEN_SECRET} 

но при запуске приложения и отлаживать, чтобы проверить, какое значение я получаю для tokenSecret, он показывает мне tokenSecret = "$ {TOKEN_SECRET}" в консоли отладки.

Я попытался изменить MyWebConfiguration.java следующим образом: -

bootstrap.setConfigurationSourceProvider(
     new SubstitutingSourceProvider(
      bootstrap.getConfigurationSourceProvider(), 
      new EnvironmentVariableSubstitutor(true)// changed false to true 
     ) 
    ); 

Но теперь, когда я пытаюсь запустить программу, она показывает мне следующее сообщение об ошибке

Exception in thread "main" io.dropwizard.configuration.UndefinedEnvironmentVariableException: The environment variable 'TOKEN_SECRET' is not defined; could not substitute the expression '${TOKEN_SECRET}'. 
    at io.dropwizard.configuration.EnvironmentVariableLookup.lookup(EnvironmentVariableLookup.java:41) 
    at org.apache.commons.lang3.text.StrSubstitutor.resolveVariable(StrSubstitutor.java:726) 
    at org.apache.commons.lang3.text.StrSubstitutor.substitute(StrSubstitutor.java:649) 
    at org.apache.commons.lang3.text.StrSubstitutor.substitute(StrSubstitutor.java:563) 
    at org.apache.commons.lang3.text.StrSubstitutor.replace(StrSubstitutor.java:305) 
    at io.dropwizard.configuration.SubstitutingSourceProvider.open(SubstitutingSourceProvider.java:39) 
    at io.dropwizard.configuration.YamlConfigurationFactory.build(YamlConfigurationFactory.java:80) 
    at io.dropwizard.cli.ConfiguredCommand.parseConfiguration(ConfiguredCommand.java:124) 
    at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:72) 
    at io.dropwizard.cli.Cli.run(Cli.java:75) 
    at io.dropwizard.Application.run(Application.java:79) 

Может кто-нибудь сказать мне, где я возможно, пошло не так?

+0

Где вы устанавливаете фактическую переменную env. В своем классе напишите main и выполните: System.out.println (System.getenv («TOKEN_SECRET»)); и посмотреть, не выводится ли выход. Вы работаете в затмении? – pandaadb

+0

Да, я запускаю его в затмении. Если я запускаю его через терминал, он работает. –

+0

Ваша среда eclipse не знает о ваших переменных env. Вам нужно зайти в вашу конфигурацию запуска и установить там переменные – pandaadb

ответ

1

Ваши переменные среды не распространяются. Автоматическое распространение из вашей системы в среду IDE, с которой вы запускали DropWizard, отсутствует.

Во-вторых, при использовании new EnvironmentVariableSubstitutor(false) (нестрогое), необходимо указать значения по умолчанию, даже если они должны быть пустыми:

tokenSecret: ${TOKEN_SECRET:-} 

Когда отсутствует строгая выбросит UndefinedEnvironmentVariableException и нестрогие будет использовать пустой строка.

 Смежные вопросы

  • Нет связанных вопросов^_^