Play (Scala)、Reactivemongo 和多个数据库

Play (Scala), Reactivemongo and multiple databases

因此,一直在使用 Play、ReactiveMongo 和 MongoDB 进行一个较小的项目。我的问题是关于 ReactiveMongo 的 application.conf 部分,有标准的可搜索的部分:

mongodb = {
  db = "db1"
  servers = [ "localhost:27017" ]
  credentials = {
    username = "auser"
    password = "apassword"
  }
}

并在 Scala 中访问集合:

def sessionCollection: JSONCollection = db.collection[JSONCollection]("session")

因此,由于 MongoDB 在数据库级别锁定以进行写入,我正在寻找使用多个数据库的解决方案。

问题是:我如何配置多个数据库,以便我可以像上面那样从这些数据库中定义集合?

MongoDB2.6.x,玩2.3.x,Reactivemongo 0.10.5.0.akka23

编辑:我应该说我已经知道 this,用代码手动完成,但我想知道是否有任何我未能通过 [=28 达到的特定于 Play 的已知解决方案=].

在您的 Play 应用程序中,您可以使用具有多个连接池的 ReactiveMongo(可能具有不同的副本集 and/or 不同的选项),使用 @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"

然后依赖项注入可以 select 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'
) {

}