我使用最新的spring-data-mongodb(1.1.0.M2)和最新的Mongo Driver(2.9.0-RC1)。我有一种情况,我有多个客户端连接到我的应用程序,我想在同一个Mongo服务器中为每个客户提供他们自己的“模式/数据库”。如果我直接使用驱动程序,这不是一项非常困难的任务:Spring-data-mongodb连接到一个Mongo实例中的多个数据库
Mongo mongo = new Mongo(new DBAddress("localhost", 127017));
DB client1DB = mongo.getDB("client1");
DBCollection client1TTestCollection = client1DB.getCollection("test");
long client1TestCollectionCount = client1TTestCollection.count();
DB client2DB = mongo.getDB("client2");
DBCollection client2TTestCollection = client2DB.getCollection("test");
long client2TestCollectionCount = client2TTestCollection.count();
看,简单。但是spring-data-mongodb不允许使用多个数据库的简单方法。建立以Mongo
连接的首选方式是延长AbstractMongoConfiguration类:
你会看到,你重写了以下方法:
getDatabaseName()
所以它强迫你使用一个数据库名称。随后构建的存储库接口在传递到SimpleMongoRepository
类的MongoTemplate中使用该数据库名称。
在哪里我会粘住多个数据库名称?我必须制作多个数据库名称,多个MongoTempate
(每个数据库名称一个)以及多个其他配置类。而这仍然没有让我的存储库接口使用正确的模板。如果有人尝试过这样的事情,请告诉我。如果我弄明白了,我会在这里发布答案。
谢谢。
是否有任何解决方案与最新版本,我面临同样的问题,ensureIndexes正在杀死我:( –
我看着'MongoTemplate'的源代码,并没有看到'ensureIndexes()' - 所以它可能工作,那些知道的人是@Oliver Gierke,他也发布了这个问题的答案 - 他是主要开发人员之一 – sbzoom
终于明白了这个问题,我使用Servlet 3.0初始化,并且没有设置应用程序上下文mongocontext在设置之后,现在一切都很顺利 –