我正在使用带有“reactivemongo”的播放框架的mongo,这在mongo连接和programm之间建立了异步桥接。对于独立项目,我总是使用casbah lib - 它有更多的本机语法(有时在每个请求中使用Futures,而且我的宗教信仰不允许我使用Async.await来阻止每个请求)对我来说没有演员开销,我也不喜欢JSON BSON转换开销。
但是在播放框架中使用casbah直接方式(只是在控制器中创建Mongo连接)会产生连接泄漏 - 这意味着你应该创建连接池并自己控制,其他词写为reactivemongo。
有没有人在生产中使用过mongo的casbah?在游戏生态系统中创建和控制连接的最佳和最规范的方式在哪里?
答案 0 :(得分:2)
首先,您应该检查 Connecting to MongoDB 。现在转到本教程create scala project(如果您使用其他编辑器,则遵循scala项目创建步骤)。
现在检查以下步骤:
1> projectName/conf/application.conf
添加application.conf mongo Db名称,集合名称,端口号,URL等play reactive 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>现在在控制器中创建一个新的.scala文件,您要在其中使用mongo连接。对于前者我创建了checkConnection.scala文件并包含类似
import com.cloudinsights.scala.controllers. {
ScalaMongoFactory
}
object checkConnection {
val collection = ScalaMongoFactory.database("your collectionName")
}
答案 1 :(得分:0)
没有必要将Async.wait与反应性mongo一起使用(反正你也不应该这样做。)
答案 2 :(得分:0)
我猜您可以使用实用程序对象来管理您的连接。
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提供数据,那么它就是一个更好的选择。