我应该使用Reactivemongo驱动程序在Scala中创建单个MongoDriver对象吗?

时间:2015-07-09 07:24:21

标签: mongodb scala reactivemongo

我有以下singleton对象,它有一个名为connect的静态方法,它返回一个DB连接。在经典的同步编程中,我被理解为相信您只需要一个连接实例,但这似乎与使用底层Actor(Akka)模型的reactiveMongo驱动程序的异步模型不一致。

   object MyMongoDriver  {



    def connect(uri: String) {



      val driver = new MongoDriver 
      val connection: Try[MongoConnection] =  
        MongoConnection.parseURI(uri).map {
          parsedURI => driver.connection(parsedURI) 
      }



  }
}

对我来说似乎发生的事情是MyMongoDriver的一个实例被实例化,然后每次调用connect时都返回多个(尽可能多的)连接?我不认为我刚刚介绍了阻止,还是我?我怀疑其余的异步行为在设计中继续发生,因为reactivemongo是反应性的。有没有更好的方法来处理连接?

2 个答案:

答案 0 :(得分:0)

documentation中所示“MongoDriver实例管理一个actor系统;一个连接管理一个连接池。通常,MongoDriver或MongoConnection永远不会被多次实例化。”

答案 1 :(得分:0)

你必须使用@Singleton制作一个Mongodb驱动程序单例。

请阅读此UserDAOMongo作为示例,https://github.com/luongbalinh/play-mongo/blob/master/app/dao/mongo/impl/UserDAOMongo.scala