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.properties
和 application-dev.properties
中?
我有一个具有以下配置的集成测试:
@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.properties
和 application-dev.properties
中?