Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mongodb播放框架_Mongodb_Scala_Playframework_Playframework 2.3_Casbah - Fatal编程技术网

使用mongodb播放框架

使用mongodb播放框架,mongodb,scala,playframework,playframework-2.3,casbah,Mongodb,Scala,Playframework,Playframework 2.3,Casbah,我正在使用带有play框架的mongo和“reactivemongo”,它在mongo连接和程序之间建立了一个异步桥梁。对于独立项目,我总是使用casbah lib,它有更多的本地语法(有时不需要在每个请求中使用Futures,我的宗教不允许我使用Async.await来阻止每个请求),并且没有参与者开销,我也不喜欢JSON BSON转换开销 但使用casbah in play framework direct way(只需在controller中创建Mongo连接)会产生连接泄漏-这意味着您应

我正在使用带有play框架的mongo和“reactivemongo”,它在mongo连接和程序之间建立了一个异步桥梁。对于独立项目,我总是使用casbah lib,它有更多的本地语法(有时不需要在每个请求中使用Futures,我的宗教不允许我使用Async.await来阻止每个请求),并且没有参与者开销,我也不喜欢JSON BSON转换开销

但使用casbah in play framework direct way(只需在controller中创建Mongo连接)会产生连接泄漏-这意味着您应该创建连接池并控制自己,否则写reactivemongo


有人在生产中使用过casbah和mongo吗?在游戏生态系统中,创建和控制连接的最佳和最规范的方式在哪里

无需将Async.wait与reactive 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提供数据,这是一个更好的选择。

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

现在检查以下步骤:

1>
projectName/conf/application.conf
add application.conf mongo数据库名称、集合名称、端口号、URL等。例如:我在我的
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> 现在在控制器中创建一个新的.scala文件,您要在其中使用mongo连接。例如,我创建了checkConnection.scala文件并包含

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

你能在你的答案上多做点工作吗?对于一个好的答案,这太简短了,信息量不够。例如,你建议用什么代替Async.wait?为什么没有必要?