Suo*_*ori 11 java spring mongodb spring-boot embedded-mongodb
我正在尝试连接嵌入式 mongodb 并使用 MongoDbSpringIntegrationTest 对其进行测试。问题是相同的代码在 2.7.7 中适用于 spring boot,但在 3.0.0 中不适用于 spring boot。问题是如何在 3.0.0 中启用嵌入式 mongodb 进行 Spring Boot 测试?
pom.xml 中的依赖项:`
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>3.5.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
`
应用程序属性:`
spring.data.mongodb.database=test
spring.data.mongodb.port=27017
spring.mongodb.embedded.version=4.0.2
Run Code Online (Sandbox Code Playgroud)
MongoDbSpringIntegrationTest:
@DataMongoTest
@ExtendWith(SpringExtension.class)
public class MongoDbSpringIntegrationTest {
@DisplayName("given object to save"
+ " when save object using MongoDB template"
+ " then object is saved")
@Test
public void test(@Autowired MongoTemplate mongoTemplate) {
// 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");
}
}
Run Code Online (Sandbox Code Playgroud)
`
当我运行这个时,我收到此错误:
org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused: no further information}}]
egi*_*ben 17
您正在使用的嵌入式 mongo 依赖项支持集成Spring boot 2.7.x。有一个新版本Spring boot 3.x。您只需要对项目进行 2 处更改:
嵌入式 Mongo 依赖
您pom.xml目前拥有:
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>3.5.3</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
将其更改为:
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo.spring30x</artifactId>
<version>4.5.2</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
注意artifactId是不同的。也是4.5.2本答案时的最新版本,可以随时在Maven上找到最新版本。
mongo版本配置
您application.properties目前拥有:
spring.mongodb.embedded.version=4.0.2
Run Code Online (Sandbox Code Playgroud)
将其更改为:
de.flapdoodle.mongodb.embedded.version=4.0.2
Run Code Online (Sandbox Code Playgroud)
mongo 版本配置现在是从fladoodle 的命名空间解析的,而不是Spring 的。
| 归档时间: |
|
| 查看次数: |
13802 次 |
| 最近记录: |