Spring Boot 测试中的 @ActiveProfile("integration-test") 未解析

@ActiveProfile("integration-test") in SpringBoot test not resolving

我有一个具有以下配置的集成测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("integration-test")
@ContextConfiguration(classes = { PersistenceJpaConfig.class, ContextConfig.class, ServiceConfig.class, WebConfig.class})
@WebAppConfiguration
public class LeadsIntegrationTest {

...

}

PersistenceJpaConfig class 如下:

@Configuration
@EnableTransactionManagement
@ComponentScan({ "org.persistence", "org.common.persistence" })
@PropertySource({ "persistence-${spring.profiles.active}.properties" })
@EnableJpaRepositories(basePackages = org.persistence.dao")
public class PersistenceJpaConfig {

...

}

${spring.profiles.active} 在活动配置文件为 "dev" 时可以很好地解析,但是当在 @ActiveProfiles("integration-test) 中设置为 "integration-test" 时,它无法解析解决。persistence-dev.properties和persistence-integration-test.properties都位于src/main/resources。dev的属性有mysql配置,integration-test嵌入了h2 运行 与开发数据隔离的集成测试的配置。当测试运行时,我得到以下信息:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in string value "persistence-${spring.profiles.active}.properties"

这是怎么回事?

您没有告诉您如何设置 dev 配置文件,但我的最佳猜测是您使用系统 属性 设置了它。当您使用 @ActiveProfiles 时,配置文件的分辨率来得太晚,@PropertySource 注释无法获取值。

无论如何,您知道 spring 启动支持 100% 的自定义代码吗?你为什么不能把那些东西放在 application-integration-test.propertiesapplication-dev.properties 中?