使用mongodb播放框架
我正在使用带有play框架的mongo和“reactivemongo”,它在mongo连接和程序之间建立了一个异步桥梁。对于独立项目,我总是使用casbah lib,它有更多的本地语法(有时不需要在每个请求中使用Futures,我的宗教不允许我使用Async.await来阻止每个请求),并且没有参与者开销,我也不喜欢JSON BSON转换开销 但使用casbah in play framework direct way(只需在controller中创建Mongo连接)会产生连接泄漏-这意味着您应该创建连接池并控制自己,否则写reactivemongo使用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连接)会产生连接泄漏-这意味着您应
有人在生产中使用过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?为什么没有必要?