首先,确保您已将以下 Spring Boot 父级添加到您的项目中:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
由于我们添加了 Spring Boot 父级,我们可以添加所需的依赖项而无需指定它们的版本:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring-boot-starter-data-mongodb 将启用 Spring 支持
MongoDB
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
de.flapdoodle.embed.mongo 提供嵌入式 MongoDB 进行集成
测试
添加 de.flapdoodle.embed.mongo 依赖后,Spring Boot 在运行测试时会自动尝试下载并启动嵌入式 MongoDB。下面的 sn-p 展示了如何手动配置嵌入式 MongoDB 实例
class EmbeddedMongoDbIntegrationTest {
private MongodExecutable mongodExecutable;
private MongoTemplate mongoTemplate;
@After
void clean() {
mongodExecutable.stop();
}
@Before
void setup() throws Exception {
String ip = "localhost";
int port = 27017;
IMongodConfig mongodConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION)
.net(new Net(ip, port, Network.localhostIsIPv6()))
.build();
MongodStarter starter = MongodStarter.getDefaultInstance();
mongodExecutable = starter.prepare(mongodConfig);
mongodExecutable.start();
mongoTemplate = new MongoTemplate(new MongoClient(ip, port), "test");
}
@Test
void test() throws Exception {
// given
DBObject objectToSave = BasicDBObjectBuilder.start()
.add("key", "value")
.get();
// when
mongoTemplate.save(objectToSave, "collection");
// then
assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key")
.containsOnly("value");
}
}
注意,我们可以快速创建配置为使用的 MongoTemplate bean
我们手动配置的嵌入式数据库并将其注册到
Spring 容器,因此您的 mongo 存储库将开始利用它
mongoTemplate 也是如此。