它是在我将 SB 应用程序升级到 3.2.0 后开始的。我最初以为我的 spring 上下文有问题。因此,经过几天的碰壁之后,我终于决定尝试一些新的东西(而且有点明显):从一个新的 SB 应用程序开始。所以我去了 https://start.spring.io/ 并创建了一个新的 SB 3.2.0,仅包含 web、mongodb 和 testcontainers,这给了我这个干净的 gradle 构建配置:
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.boot:spring-boot-testcontainers'
testImplementation 'org.testcontainers:junit-jupiter'
testImplementation 'org.testcontainers:mongodb'
}
tasks.named('test') {
useJUnitPlatform()
}
到目前为止一切看起来都很好,所以我去了 spring 提供的演示测试文件并将其更改为:
@Testcontainers
@SpringBootTest
class DemoApplicationTests {
@Container
@ServiceConnection
static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:latest");
@Test
void contextLoads() {
}
}
如果我现在运行测试,虽然测试本身通过了,但它会抛出以下异常:
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:177) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:200) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:739) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:603) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:451) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:404) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:224) ~[mongodb-driver-core-4.11.1.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:156) ~[mongodb-driver-core-4.11.1.jar:na]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
我使用的是 Apple M1 Max - 但在使用 Linux (Ubuntu) 的 Github Actions 运行器上运行时,我也得到了相同的结果。
有什么想法这是一个错误还是我做错了什么?
@Configuration
public class TestcontainersMongoSetup {
@Bean
MongoClientSettings getMongoClientSettings() {
return MongoClientSettings.builder()
.retryWrites(true)
.applyToConnectionPoolSettings(poolSettings -> poolSettings
.minSize(5)
.maxSize(300)
.maxConnectionIdleTime(0, TimeUnit.MILLISECONDS))
.applyToSocketSettings(socketSettings -> socketSettings
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES))
.build();
}
}