播放(Scala),Reactivemongo和多个数据库

时间:2015-02-13 23:44:50

标签: scala playframework reactivemongo

所以,一直在使用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在数据库级锁定写入,我正在寻找使用多个数据库的解决方案。

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

MongoDB 2.6.x,Play 2.3.x,Reactivemongo 0.10.5.0.akka23

编辑:我应该说我已经知道this,使用代码手动执行,但我想知道是否有任何Play特定的已知解决方案我无法通过Google访问。< / p>

1 个答案:

答案 0 :(得分:0)

在Play应用程序中,您可以使用@NamedDatabase注释将ReactiveMongo与多个连接池(可能具有不同的副本集和/或不同选项)一起使用。

考虑以下配置,其中包含多个连接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'
) {

}