SpringBoot Data Mongodb 与 Testcontainers 导致“过早到达流末尾”

问题描述 投票:0回答:1

它是在我将 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 运行器上运行时,我也得到了相同的结果。

有什么想法这是一个错误还是我做错了什么?

spring spring-boot spring-data spring-data-mongodb spring-boot-testcontainers
1个回答
0
投票
@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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.