使用 ConfigFileApplicationContextInitializer 不会解析 @Value 的默认值

pra*_*eek 3 spring-boot

当我使用:

@ContextConfiguration(classes = { DmiVehicleRTExportConfig.class },
  initializers = ConfigFileApplicationContextInitializer.class)
Run Code Online (Sandbox Code Playgroud)

我的集成测试因以下属性而失败:

${oauth2client.prematureTimeout:600}
Run Code Online (Sandbox Code Playgroud)

没有得到 600 的默认值。

这是通过使用解决的:SpringApplicationConfiguration但我想使用ConfigFileApplicationContextInitializer.class而不是SpringApplicationConfiguration.

谢谢。

ctr*_*uan 6

我遇到过同样的问题。PropertySourcesPlaceholderConfigurer.class需要补充:

@ContextConfiguration(classes = { DmiVehicleRTExportConfig.class, 
                           PropertySourcesPlaceholderConfigurer.class },
initializers = ConfigFileApplicationContextInitializer.class)
Run Code Online (Sandbox Code Playgroud)

Spring 团队刚刚添加了一条关于此的说明:

单独使用 ConfigFileApplicationContextInitializer 不会为 @Value("${...?}") 注入提供支持。它唯一的工作是确保 application.properties 文件加载到 Spring 的 Environment 中。对于@Value 支持,您需要另外配置一个 PropertySourcesPlaceholderConfigurer 或使用 @SpringBootTest ,其中一个将为您自动配置。