簡體   English   中英

使用 Mongodb 版本 4 和副本配置 flapdoodle 嵌入式 mongo

[英]Configuring flapdoodle embedded mongo with Mongodb version 4 and replica

我目前正在開發 Spring Boot 應用程序 2.0.3.RELEASE。 我想用 MongoDb 4.0 版配置 Flapdoodle MongoDb,我還想設置一個 mongo 實例並為其創建副本。

到目前為止,我還沒有弄清楚使用fladdoodle創建集群和副本的過程。

我在用

         MongodConfigBuilder().version(Version.Main.DEVELOPMENT)
        .replication(new Storage(null, null, 0))
        .build();

我在這里閱讀了許多與此配置相關的問題,但沒有一個與我的問題有關。 eg 如何配置兩個實例mongodb 使用spring boot 和spring data

fladdoodle 配置對此有一個實現,但我不確定如何訪問它。

https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo/blob/master/src/main/java/de/flapdoodle/embed/mongo/tests/MongosSystemForTestFactory.java

在應用程序啟動之前,有什么方法可以在我的測試類中配置它。 謝謝

我必須在 Web 集成測試中使用副本集啟動嵌入式 mongo,在下面的代碼中使用

@Configuration
public class MongoConfig {

    public static int mongodPort;
    public static String defaultHost = "localhost";
    static {
        try {
            mongodPort = Network.getFreeServerPort();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Bean
    public IMongodConfig prepareMongodConfig() throws IOException {
        IMongoCmdOptions cmdOptions = new MongoCmdOptionsBuilder()
                .useNoPrealloc(false)
                .useSmallFiles(false)
                .master(false)
                .verbose(false)
                .useNoJournal(false)
                .syncDelay(0)
                .build();

        IMongodConfig mongoConfigConfig = new MongodConfigBuilder()
                .version(Version.Main.PRODUCTION)
                .net(new Net(mongodPort, Network.localhostIsIPv6()))
                .replication(new Storage(null, "testRepSet", 5000))
                .configServer(false)
                .cmdOptions(cmdOptions)
                .build();
        return mongoConfigConfig;
    }

}

在調用我的控制器之前,我使用以下代碼啟用了帶有副本集的數據庫

 Public class ITtest {
    public  void  setSystemProperty() {
            System.setProperty("spring.data.mongodb.port", String.valueOf(MongoConfig.mongodPort));
            System.setProperty("spring.data.mongodb.host", MongoConfig.defaultHost);
        }

        public static boolean isReplicaSetRun = false;

        public static void setupMongoReplica() {
            if (! isReplicaSetRun) {
                System.out.println("Starting db on port: " +MongoConfig.mongodPort);
                MongoClient client = new MongoClient(MongoConfig.defaultHost, MongoConfig.mongodPort);
                client.getDatabase("admin").runCommand(new Document("replSetInitiate", new Document()));
                client.close();
                isReplicaSetRun = true;
            }
        }

        @Test
        @Order(1)
        public void testParallel() {
            setSystemProperty();
            setupMongoReplica();
            // call web controller
      }
   }

如果要運行應用程序,則可以在 ApplicationListener 的實現中啟用副本集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM