Java 使用Mongodb版本4和副本配置Flappodle embedded mongo
我目前正在开发spring boot应用程序2.0.3.0版本。我想用MongoDb 4.0版配置Flappodle MongoDb,还想设置一个mongo实例并为其创建副本 到目前为止,我还没有弄清楚使用flapdoodle创建集群和副本的过程 我正在使用Java 使用Mongodb版本4和副本配置Flappodle embedded mongo,java,spring,spring-boot,embedded-database,spring-mongodb,Java,Spring,Spring Boot,Embedded Database,Spring Mongodb,我目前正在开发spring boot应用程序2.0.3.0版本。我想用MongoDb 4.0版配置Flappodle MongoDb,还想设置一个mongo实例并为其创建副本 到目前为止,我还没有弄清楚使用flapdoodle创建集群和副本的过程 我正在使用 MongodConfigBuilder().version(Version.Main.DEVELOPMENT) .replication(new Storage(null, null, 0))
MongodConfigBuilder().version(Version.Main.DEVELOPMENT)
.replication(new Storage(null, null, 0))
.build();
我在这里阅读了许多与此配置相关的问题,但没有一个与我的问题相关。如
活板门配置对此有一个实现,但我不知道如何访问它
在应用程序启动之前,有没有办法在我的测试类中配置它。
谢谢我不得不在web集成测试中使用replicaset启动嵌入式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
}
}
在调用我的控制器之前,我使用下面的代码启用了具有副本集的DB
@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的实现中启用replicaset