所以,一直在使用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>
答案 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'
) {
}