【发布时间】:2017-07-08 19:00:51
【问题描述】:
这是我要优化的代码:
object UserRepo
{
val users = TableQuery[Users]
val dbName = "db"
lazy val queryAllUsers = for (user <- users) yield user
type UserRow = (Int, String, String, String)
def getAll() : Future[ Seq[UserRow] ] =
{
val db = Database.forConfig( dbName )
val f: Future[Seq[UserRow]] = db.run( queryAllUsers.result )
f.onComplete {
case Success(_) => { db.close() }
case Failure(_) => { db.close() }
}
f
}
}
我将对数据库进行多次查询,我试图摆脱创建数据库连接的字符串。有没有我可以用来明确关闭连接的执行上下文?所以代码看起来会更简洁?
是否有在 Future.onComplete 范围内使用数据库连接的选项?
谢谢
【问题讨论】:
-
那么你的意思是你想为这个单一的操作创建(然后关闭)数据库连接?您不应该在应用程序的某种启动/关闭时打开/关闭连接并在执行查询时重新使用连接吗?
-
好点,您的意思是在应用程序级别管理数据库连接?是的,这可能很好,但据我所知,我将不得不手动创建此代码?浮油中有什么东西吗?
-
你在用
Play吗? -
我创建了单独的项目来管理与数据库/数据相关的所有工作,并计划在 Play 项目中以及在数据处理服务中重用它
-
如果您正在使用 play,查看
play-slick并简单地使用DI可能会很有用。让我用Play样式DI更新答案。
标签: scala slick slick-3.0 play-slick