我在Play 2.1.3应用程序中使用play-slick 这是插入记录的代码
def insert = DBAction { implicit rs =>
recordForm.bindFromRequest.fold (
formWithErrors => {
Redirect(HomePage).flashing("alert-error" -> "Enter proper values")
},
record => {
Records.insert(record)
Redirect(HomePage).flashing("alert-success" -> "Record inserted successfully")
}
)
}
以上代码泄漏连接,应用程序在30多个请求之后抛出以下错误
java.sql.SQLException: Timed out waiting for a free available connection.
at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[bonecp.jar:0.7.1.RELEASE]
at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) ~[bonecp.jar:0.7.1.RELEASE]
at scala.slick.session.PlayDatabase.createConnection(PlayDatabase.scala:9) ~[na:na]
at scala.slick.session.BaseSession.conn$lzycompute(Session.scala:207) ~[slick_2.10-1.0.1.jar:1.0.1]
at scala.slick.session.BaseSession.conn(Session.scala:207) ~[slick_2.10-1.0.1.jar:1.0.1]
at scala.slick.session.Session$class.prepareStatement(Session.scala:29) ~[slick_2.10-1.0.1.jar:1.0.1]
报告了类似的问题,但这段代码略有不同 有什么想法吗?
答案 0 :(得分:1)
这可能是https://github.com/freekh/play-slick/issues/81中描述的错误“2)”的一个实例。它在play-slick master中修复,并将在下一个版本中。游戏中的错误代码在此解释Play slick and Async - is it a race condition?。该错误触发了Slick中的后续错误,而不是抛出异常,连接被泄露:https://github.com/slick/slick/pull/107