我有以下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是反应性的。有没有更好的方法来处理连接?
答案 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