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'
) {

}
Другие вопросы по тегам