EmbeddedMongo 每次都在一个随机端口上启动?

问题描述

我正在使用 Flapdoodle's Embedded Mongo 在我的 Spring Boot 应用程序上运行集成测试。

我有如下测试:

@SpringBoottest(classes = Application.class)
@TestMethodorder(OrderAnnotation.class)
class IntegrationTests {

@BeforeAll
    static void setup() throws Exception {
        String ip = "localhost";
        int port = 65000;

        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(MongoClients.create(String.format(CONNECTION_STRING,ip,port)),"test");

}

但是每次 MongoDB 服务器在一个随机端口上启动时:

[2021-03-16T01:41:26.026Z] [com.mongodb.diagnostics.logging.SLF4JLogger] [main] [71] [INFO ] Opened connection [connectionId{localValue:4,serverValue:2}] to localhost:55359

我尝试为端口使用不同的值,但没有一个起作用。

为什么我的配置没有得到尊重?

如果我需要任何其他信息,请告诉我。

解决方法

只排除默认加载的 AutoConfiguration 类:

B1(0) = "AT 1/1"

顺便说一下,我使用切片测试注释 @DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class) class IntegrationTests { ... } 而不是 @DataMongoTest 以便仅引导测试所需的内容(与 MongoDB 相关的 bean)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...