【问题标题】:@ActiveProfile("integration-test") in SpringBoot test not resolvingSpring Boot 测试中的@ActiveProfile("integration-test") 无法解析
【发布时间】:2016-12-10 23:02:46
【问题描述】:

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

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

...

}

PersistenceJpaConfig 类如下:

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

...

}

当活动配置文件为“dev”时,${spring.profiles.active} 可以正常解析,但在 @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"

这是怎么回事?

【问题讨论】:

    标签: spring-boot spring-profiles


    【解决方案1】:

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

    无论如何,您是否知道 Spring Boot 开箱即用地支持 100% 的自定义代码?为什么不能把这些东西放在application-integration-test.propertiesapplication-dev.properties 中?

    【讨论】:

    • 感谢 Stephane 的回复。我认为您对 ActiveProfiles 分辨率是绝对正确的。我摆脱了它,只是在我的 src/test/java 和 src/test/resources 文件夹中创建了一个单独的 JpaPersistenceConfigTest.java 类和 pesistence-integration-test.properties 文件。属性文件位置被硬编码到 JpaPersistenceConfigTest.java 类中。现在没有可变分辨率。棘手的部分是让 Spring 从单元测试位置在类路径上找到这个属性文件。必须在新 JpaPersistenceConfigTest.java 的 @PropertySource 中显式放置类路径。
    • 我很高兴你成功了。可惜你没有尝试使用 Spring Boot 提供的功能,你不必编写一行 Java 配置......
    • 嗨斯蒂芬。你会如何使用 SpringBoot 来做到这一点?
    猜你喜欢
    • 2023-04-11
    • 2016-01-20
    • 1970-01-01
    • 2019-12-13
    • 2017-08-02
    • 2013-08-29
    • 2017-07-17
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多