Я использую последнюю версию spring-data-mongodb (1.1.0.M2) и последнюю версию драйвера Mongo (2.9.0-RC1). У меня есть ситуация, когда у меня есть несколько клиентов, подключающихся к моему приложению, и я хочу предоставить каждому свою собственную «схему/базу данных» на одном и том же сервере 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()
Таким образом, это заставляет вас использовать одно имя базы данных. Интерфейсы репозитория, которые вы затем создаете, используют это имя базы данных внутри MongoTemplate, которое передается в класс SimpleMongoRepository
.
Куда бы я вставил несколько имен баз данных? Мне нужно создать несколько имен баз данных, несколько MongoTempate
(по одному на имя базы данных) и несколько других классов конфигурации. И это все еще не заставляет интерфейсы моего репозитория использовать правильный шаблон. Если кто-то пробовал подобное, сообщите мне. Если разберусь, напишу ответ здесь.
Спасибо.