Я использую последний spring -data-mongodb (1.1.0.M2) и последний Mongo Driver (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
(по одному для имени базы данных) и несколько других классов конфигурации. И это все еще не позволяет моим интерфейсам репозитория использовать правильный шаблон. Если кто-нибудь пробовал такую вещь, дайте мне знать. Если я это выясню, я отправлю ответ здесь.
Спасибо.