2015-03-09 3 views
2

Мне нужно проверить код приложения Spring, создав тест интеграции Cucumber. Я использую SpringApplicationBuilder запустить мое приложение, прежде чем фактическая логика срабатывает и я использую следующий синтаксис для этого: -SpringBoot SpringApplicationBuilder

application = new SpringApplicationBuilder() 
    .parent(new Object[]{"classpath:file1.xml", "classpath:file2.xml"}) 
    .profiles("abc") 
    .properties("name:value") [It has 5/6 (name:value) pairs here]* 
    .showBanner(false) 
    .logStartupInfo(true) 
    .headless(true) 
    .application() 
    .run(); 

Моя весна приложение запускается правильно. Тем не менее, он не получает значения для пар свойств (имя, значение), которые я передаю SpringApplicationBuilder(). Я попытался следующие, чтобы установить их: -

  1. Используя пары значений имя, как указано выше
  2. элемента списка с помощью HashMap (название, значение) пар
  3. Создание ConfigurableEnvironment, извлекая MutablePropertySources и настройки мои свойства в нем.

Ни один из этих параметров не работает, поэтому, когда приложение запускается и код пытается получить доступ к некоторым значениям системного свойства, он прерывается.

Любые идеи, как это можно исправить .. Вся помощь очень ценится! Мне нужны эти свойства как свойства Spring, чтобы убедиться, что приложение работает правильно. Может быть, я могу проверить свой код с помощью реквизита Spring каким-то другим способом? Если да, то как мне это сделать?

+1

Как вы извлекаете переменные окружения? – Mithun

+0

Я не извлекаю переменные среды на самом деле. Мне нужно только использовать специальные свойства Spring, которые я извлекаю с помощью аннотаций. Итак, если свойства Spring будут установлены правильно, тест Cuke должен работать так, как если бы приложение Spring запускалось нормально. – Hello

ответ

0

Вы можете настроить свойства, как показано ниже:

application = new SpringApplicationBuilder() 
    .parent(new Object[]{"classpath:file1.xml", "classpath:file2.xml"}) 
    .profiles("abc") 
    .properties("key1:test1", "key2:test2") 
    .showBanner(false) 
    .logStartupInfo(true) 
    .headless(true) 
    .application() 
    .run(); 

Теперь, получить свойства, используя @Value аннотацию:

@Value("${key1}") 
String val; 

Переменная val будет присвоено значение test1

+0

Большое спасибо за вашу помощь, но значение, которое я получаю, когда я делаю вышеуказанные шаги, это «$ key1» вместо фактического значения. Любые идеи ... – Hello

+0

Я могу ввести значение key1, используя вышеприведенный код. Пожалуйста, поделитесь классом, в котором вы добавили аннотацию с '@ Value'. Кроме того, поделитесь файлом конфигурации пружины. – Mithun

0

I» я сам занимался той же проблемой. Моя проблема заключалась в том, что ключи, значения которых я пытался установить, также были установлены в файле application.properties.

После удаления записей из файла это сработало.

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