Play (Scala), Reactivemongo и несколько баз данных
Итак, работаю над меньшим проектом с Play, ReactiveMongo и MongoDB. Мой вопрос о application.conf
часть для ReactiveMongo, есть стандартная Googlable:
mongodb = {
db = "db1"
servers = [ "localhost:27017" ]
credentials = {
username = "auser"
password = "apassword"
}
}
И чтобы получить доступ к коллекции, в Scala:
def sessionCollection: JSONCollection = db.collection[JSONCollection]("session")
Итак, поскольку MongoDB блокируется на уровне базы данных для записи, я ищу решение использовать несколько баз данных.
Вопрос: как настроить несколько баз данных, чтобы я мог определять коллекции, как указано выше, из этих баз данных?
MongoDB 2.6.x, Play 2.3.x, Reactivemongo 0.10.5.0.akka23
Изменить: я должен сказать, что я уже знаю об этом, делая это вручную с кодом, но я хотел знать, есть ли какие-либо конкретные решения Play, которые я не смог достичь через Google.
1 ответ
В своем приложении Play вы можете использовать ReactiveMongo с несколькими пулами подключений (возможно, с разными наборами реплик и / или разными параметрами), используя @NamedDatabase
аннотаций.
Рассмотрим следующую конфигурацию с несколькими URI соединения.
# The default URI
mongodb.uri = "mongodb://someuser:somepasswd@localhost:27017/foo"
# Another one, named with 'bar'
mongodb.bar.uri = "mongodb://someuser:somepasswd@localhost:27017/lorem"
Затем внедрение зависимостей может выбирать экземпляры API, используя имена.
импорт javax.inject.Inject
import play.modules.reactivemongo._
class MyComponent @Inject() (
val defaultApi: ReactiveMongoApi, // corresponds to 'mongodb.uri'
@NamedDatabase("bar") val barApi: ReactiveMongoApi // 'mongodb.bar'
) {
}