如何在Spring Boot测试中清除MongoDB相关配置属性?
Spring Boot测试中清除MongoDB认证配置的方法
以下几种方法可以解决主配置中MongoDB认证信息干扰TestContainers测试的问题:
直接在测试类上用@TestPropertySource覆盖
在测试类头部添加注解,将认证相关属性设为空字符串,覆盖主配置里的值:@TestPropertySource(properties = { "spring.data.mongodb.username=", "spring.data.mongodb.password=", "spring.data.mongodb.authentication-database=" })Spring Boot会将空字符串识别为未配置该属性,这样TestContainers的无认证MongoDB就能正常连接。
修正@DynamicPropertySource的配置方式
之前返回null的方式无效,因为DynamicPropertyRegistry会忽略null值。改为返回空字符串,显式覆盖主配置:@DynamicPropertySource static void setMongoProperties(DynamicPropertyRegistry registry) { MongoContainer mongoContainer = new MongoContainer("mongo:latest"); mongoContainer.start(); registry.add("spring.data.mongodb.uri", mongoContainer::getReplicaSetUrl); // 清空认证属性 registry.add("spring.data.mongodb.username", () -> ""); registry.add("spring.data.mongodb.password", () -> ""); registry.add("spring.data.mongodb.authentication-database", () -> ""); }用测试专用配置文件+激活配置
在src/test/resources/application-test.properties中写入:spring.data.mongodb.username= spring.data.mongodb.password= spring.data.mongodb.authentication-database=然后在测试类上添加
@ActiveProfiles("test"),让测试加载这个配置文件,覆盖主配置的对应属性。通过@SpringBootTest的properties参数直接设置
无需额外配置文件,直接在测试类的@SpringBootTest注解中指定要清空的属性:@SpringBootTest(properties = { "spring.data.mongodb.username=", "spring.data.mongodb.password=", "spring.data.mongodb.authentication-database=" })
内容的提问来源于stack exchange,提问作者Stewart
相关产品推荐
相关产品推荐

