2015-11-19 2 views
1

Когда я использую:с помощью ConfigFileApplicationContextInitializer не разрешает значения по умолчанию для @value

@ContextConfiguration(classes = { DmiVehicleRTExportConfig.class }, 
    initializers = ConfigFileApplicationContextInitializer.class) 

мои интеграционные тесты терпят неудачу в качестве свойств, таких как:

${oauth2client.prematureTimeout:600} 

не получают значение 600 по умолчанию.

Это можно решить, используя: SpringApplicationConfiguration, но я хочу использовать ConfigFileApplicationContextInitializer.class вместо SpringApplicationConfiguration.

Спасибо.

+0

У меня такая же проблема. '' '@ContextConfiguration (initializers = ConfigFileApplicationContextInitializer.class, classes = {DatabaseConfig.class}' '' Не загружается мой ямл для окна Config @ Value injection ... – Basil

ответ

0

Я имел эту проблему в JUnit тестов также при использовании

@SpringApplicationConfiguration 

Я решить эту проблему, добавив класс с «статической силы основных()» метод к классам конфигурации:

@Configuration 
public class SpringEmptyApplication{ 

    public static void main(String[] args) { 
     SpringApplication.run(SpringBootEmptyApplication.class); 
    } 
} 

Я поместил этот класс первым в список классов конфигурации, таких как

@SpringApplicationConfiguration(classes = {  
SpringBootEmptyApplication.class, 
DmiVehicleRTExportConfig.class 
}) 

Это работает идеально для меня.

Если вы хотите, чтобы избежать

@SpringApplicationConfiguration 

вы можете попробовать

@ContextConfiguration(loader = SpringApplicationContextLoader.class ... 

Это как @SpringApplicationConfiguration сама аннотированный, может быть этот загрузчик может решить эту проблему, не пробовал ...

1

У меня была та же проблема. PropertySourcesPlaceholderConfigurer.class должен быть добавлен:

@ContextConfiguration(classes = { DmiVehicleRTExportConfig.class, 
          PropertySourcesPlaceholderConfigurer.class }, 
initializers = ConfigFileApplicationContextInitializer.class) 

Spring команда просто добавил записку о том, что:

Использование ConfigFileApplicationContextInitializer в одиночку не будет оказывать поддержку @value ("$ {...}") инъекции , Его единственная задача - обеспечить загрузку файлов application.properties в среду Spring. Для поддержки @Value вам необходимо либо дополнительно настроить PropertySourcesPlaceholderConfigurer, либо использовать @SpringBootTest, где вы будете автоматически настроены для вас.

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