繁体   English   中英

与mongodb一起玩框架

[英]play framework with mongodb

我将mongo与带有“ reactivemongo”的播放框架一起使用,这在mongo连接和编程之间建立了异步桥梁。 对于独立项目,我始终使用casbah lib-它具有更多的本机语法(有时不需要在每个请求中使用Futures,并且我的宗教信仰不允许我使用Async.await阻止每个请求),并且没有参与者的开销,我也不喜欢JSON BSON转换开销。

但是直接在播放框架中使用casbah(仅在controller中创建Mongo连接)会产生连接泄漏-这意味着您应该创建连接池并自己控制,否则写出reactmongo。

有人在生产中将casbah和mongo一起使用吗? 在游戏生态系统中建立和控制联系的最佳,最规范的方法在哪里?

首先,您应该选中“ 连接到MongoDB” 现在转到本教程, 创建scala项目 (如果您使用了其他编辑器,请遵循scala项目创建步骤)。

现在检查以下步骤:

1> projectName/conf/application.conf添加application.conf mongo数据库名称,集合名称,端口号,URL等。例如, 播放反应性mongo :我在application.conf添加了以下内容

mongodb.default.host = "localhost"
mongodb.default.db = "Demo"
mongodb.default.port = "27017"
CI.default.uri = "mongodb://localhost:27017/"

2>在controller文件夹中创建一个.scala文件,为ex指定任何名称。 我将文件名设置为ScalaMongoFactory并在此文件中添加以下代码

import com.mongodb.casbah. {
  MongoClient, MongoClientURI
}
import com.typesafe.config.ConfigFactory
object ScalaMongoFactory {
  private val config = ConfigFactory.load()
  private val DATABASE = config.getString("mongodb.default.db")
  private val server = MongoClientURI(config.getString("CI.default.uri"))
  private val client = MongoClient(server)
  val database = client(DATABASE)
}

3>现在,在要使用mongo连接的控制器中创建一个新的.scala文件。 对于前。 我创建了checkConnection.scala文件,其中包含

import com.cloudinsights.scala.controllers. {
  ScalaMongoFactory
}
object checkConnection {
  val collection = ScalaMongoFactory.database("your collectionName")
}

无需将Async.wait与反应性mongo一起使用(无论如何,您都不应如此)。

我想您可以使用实用程序对象来管理您的连接。

import com.mongodb.casbah.{MongoClient, MongoDB}
import play.api.Play

object MongoManager {
    private val server = Play.current.configuration.getString("db.host").get
    private val port = Play.current.configuration.getInt("db.port").get

    object using {
        def apply[A](col: String)(block: MongoDB => A): A = {
            val con = MongoClient(server, port)
            val a = block(con.apply(col))
            con.close
            a
        }
        def apply[A](block: MongoClient => A): A = {
            val con = MongoClient(server, port)
            val a = block(con)
            con.close
            a
        }
    }

    object stashed {
        private lazy val con = MongoClient(server, port)
        def apply(col: String): MongoDB = con.apply(col)
        def apply: MongoClient = con
    }
}

我没有找到该驱动程序的播放插件。

我个人建议使用ReactiveMongo驱动程序,因为它也可以使用play的JSON库。 如果您要从数据库中获取数据并通过REST API馈送数据,那么它是一个更好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM