在使用嵌入式MongoDB进行测试时,你可能会遇到一些限制,其中之一就是不支持MongoDB集群和会话(sessions)。嵌入式MongoDB通常用于单节点的开发和测试环境,而不是用于模拟生产环境中的集群设置。
如果你在测试中遇到“Mongo群集问题不支持会话”的错误,通常是因为嵌入式MongoDB不支持分片(sharding)和复制集(replica sets)等集群功能,这些功能在生产环境中是常见的。
确保你的Spring配置使用的是单节点嵌入式MongoDB:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import de.flapdoodle.embed.mongo.MongodExecutable;
import de.flapdoodle.embed.mongo.MongodStarter;
import de.flapdoodle.embed.mongo.config.MongodConfig;
import de.flapdoodle.embed.mongo.config.RuntimeConfig;
import de.flapdoodle.embed.mongo.distribution.Version;
import de.flapdoodle.embed.process.runtime.Network;
@Configuration
public class EmbeddedMongoConfig {
@Bean
public MongodExecutable embeddedMongoServer() throws Exception {
MongodStarter starter = MongodStarter.getDefaultInstance();
int port = 27017;
MongodConfig mongodConfig = MongodConfig.builder()
.version(Version.Main.PRODUCTION)
.net(new Net(port, Network.localhostIsIPv6()))
.build();
return starter.prepare(mongodConfig);
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
embeddedMongoServer().start();
return new MongoTemplate(new SimpleMongoClientDatabaseFactory("mongodb://localhost:27017/test"));
}
}
如果你需要测试MongoDB集群,可以使用Docker Compose来启动一个MongoDB集群:
version: '3.1'
services:
mongo1:
image: mongo:4.4
container_name: mongo1
ports:
- 27017:27017
command: ["mongod", "--replSet", "rs0"]
mongo2:
image: mongo:4.4
container_name: mongo2
ports:
- 27018:27017
command: ["mongod", "--replSet", "rs0"]
mongo3:
image: mongo:4.4
container_name: mongo3
ports:
- 27019:27017
command: ["mongod", "--replSet", "rs0"]
mongo-setup:
image: mongo:4.4
depends_on:
- mongo1
- mongo2
- mongo3
entrypoint: >
bash -c "
sleep 5;
echo 'rs.initiate({_id: \"rs0\", members: [{ _id: 0, host: \"mongo1:27017\" }, { _id: 1, host: \"mongo2:27017\" }, { _id: 2, host: \"mongo3:27017\" }]})' | mongo --host mongo1:27017;
"
然后在Spring配置中连接到这个集群:
spring:
data:
mongodb:
uri: mongodb://mongo1:27017,mongo2:27017,mongo3:27017/test?replicaSet=rs0
通过这种方式,你可以在本地环境中模拟一个MongoDB集群,并进行相关的测试。
领取专属 10元无门槛券
手把手带您无忧上云