【问题标题】:Play (Scala), Reactivemongo and multiple databasesPlay (Scala)、Reactivemongo 和多个数据库
【发布时间】:2015-04-15 03:32:18
【问题描述】:

因此,一直在使用 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 获得。

【问题讨论】:

  • documentation 中所述,从 0.12.0 开始“您可以使用带有多个连接池的 ReactiveMongo(可能使用不同的副本集和/或不同的选项),使用 @NamedDatabase 注释”跨度>
  • 感谢您的意见,@cchantep。你能把它写成答案吗,我会接受的。

标签: scala playframework reactivemongo


【解决方案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'
) {

}

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多