
本文旨在解决spring boot 3.0.0及更高版本中嵌入式mongodb集成测试遇到的兼容性问题。我们将详细阐述从spring boot 2.x迁移时,`de.flapdoodle.embed.mongo` 依赖和相关配置属性的变化。通过更新依赖项和调整配置,确保开发人员能够顺利地在spring boot 3.x项目中利用嵌入式mongodb进行快速、独立的集成测试。
在Spring Boot应用程序的开发过程中,使用嵌入式MongoDB进行集成测试是一种高效且独立的方式,它避免了对外部MongoDB实例的依赖。然而,从Spring Boot 2.x版本升级到3.x时,开发者可能会遇到嵌入式MongoDB无法正常启动的问题,例如常见的“Connection refused”或“Timed out while waiting to connect”错误。这主要是由于底层的de.flapdoodle.embed.mongo库与Spring Boot 3.x的集成方式发生了变化。
Spring Boot 3.x基于Jakarta EE,并对许多核心依赖进行了升级。flapdoodle-oss项目为了支持Spring Boot 3.x,也推出了新的集成模块。旧版本的de.flapdoodle.embed.mongo依赖主要是为Spring Boot 2.7.x及更早版本设计的,因此在Spring Boot 3.x环境中直接使用会导致兼容性问题,无法正确地启动和管理嵌入式MongoDB实例。
要解决Spring Boot 3.x中嵌入式MongoDB的兼容性问题,主要需要进行两项关键更改:更新Maven依赖项和调整application.properties中的配置属性。
旧的de.flapdoodle.embed.mongo依赖不再适用于Spring Boot 3.x。你需要将其替换为专门为Spring Boot 3.x设计的集成模块。
旧的 pom.xml 依赖 (Spring Boot 2.x 兼容):
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>3.5.3</version> <!-- 或其他旧版本 -->
<scope>test</scope>
</dependency>新的 pom.xml 依赖 (Spring Boot 3.x 兼容):
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo.spring30x</artifactId>
<version>4.5.2</version> <!-- 请检查Maven Central获取最新版本 -->
<scope>test</scope>
</dependency>请注意,artifactId已从de.flapdoodle.embed.mongo更改为de.flapdoodle.embed.mongo.spring30x。同时,建议访问Maven Central (https://www.php.cn/link/be7f9ca66f2fb4e760fb991d89d74002) 以获取de.flapdoodle.embed.mongo.spring30x的最新稳定版本,确保使用最新的修复和功能。
在Spring Boot 3.x中,嵌入式MongoDB的版本配置属性的命名空间也发生了变化。它不再由Spring Boot自身管理,而是直接由flapdoodle-oss的命名空间解析。
旧的 application.properties 配置 (Spring Boot 2.x 兼容):
spring.data.mongodb.database=test spring.data.mongodb.port=27017 spring.mongodb.embedded.version=4.0.2
新的 application.properties 配置 (Spring Boot 3.x 兼容):
spring.data.mongodb.database=test spring.data.mongodb.port=27017 de.flapdoodle.mongodb.embedded.version=4.0.2
关键更改是将spring.mongodb.embedded.version替换为de.flapdoodle.mongodb.embedded.version。其他与MongoDB连接相关的属性(如spring.data.mongodb.database和spring.data.mongodb.port)通常保持不变。
完成上述依赖和配置的更新后,你可以像往常一样使用Spring Boot的测试注解来编写集成测试。@DataMongoTest注解会配置一个嵌入式MongoDB实例,并提供MongoTemplate bean,方便进行数据操作。
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.assertj.core.api.Assertions.assertThat;
@DataMongoTest
@ExtendWith(SpringExtension.class)
public class MongoDbSpringIntegrationTest {
@DisplayName("给定一个对象,当使用MongoDB模板保存时,对象被成功保存")
@Test
public void testSaveObjectWithMongoTemplate(@Autowired MongoTemplate mongoTemplate) {
// 准备数据
DBObject objectToSave = BasicDBObjectBuilder.start()
.add("key", "value")
.get();
// 执行保存操作
mongoTemplate.save(objectToSave, "collection");
// 验证结果
assertThat(mongoTemplate.findAll(DBObject.class, "collection"))
.extracting("key")
.containsOnly("value");
}
}在这个示例中,@DataMongoTest负责启动一个嵌入式MongoDB实例,并配置必要的Spring上下文。@ExtendWith(SpringExtension.class)确保JUnit 5与Spring Test框架集成。通过@Autowired注入的MongoTemplate可以直接用于与嵌入式数据库进行交互。
通过上述依赖项和配置属性的调整,你将能够在Spring Boot 3.x项目中成功地使用嵌入式MongoDB进行高效且可靠的集成测试,从而提升开发效率和代码质量。
以上就是解决Spring Boot 3.x中嵌入式MongoDB测试兼容性问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号