Конфигурирование встроенного монета flapdoodle с Mongodb версии 4 и реплики

В настоящее время я работаю над приложением весенней загрузки 2.0.3.RELEASE. Я хочу настроить Flapdoodle MongoDb с MongoDb версии 4.0, а также настроить отдельный экземпляр mongo и создать для него реплики.

До сих пор я не выяснил процесс создания кластера и реплик с использованием flapdoodle.

я использую

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

Я прочитал много вопросов здесь, связанных с этой конфигурацией, но ни один из них не связан с моей проблемой. Например, как настроить два экземпляра mongodb, используя данные весенней загрузки и пружины

Конфигурация flapdoodle имеет реализацию для этого, но я не уверен, как получить к ней доступ.

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

Есть ли способ настроить его в моем тестовом классе до запуска приложения. Спасибо

0 ответов

Мне пришлось запустить Embedded 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.

Другие вопросы по тегам