游戏中的 SQLTimeoutException
SQLTimeoutException in play-slick
我正在以这种方式将 play-slick 与 slick 3.0.0 一起使用:
我通过
获得了联系
val conn = db.createSession.conn
然后得到语句:
val statement = conn.prepareStatement(querySQL)
和return 结果集:
Future{statement.executeQuery()}
但是我遇到了一个问题:我尝试使用这个查询大约 50 次,然后,我得到了异常:
SQLTimeoutException: Timeout after 1000ms of waiting for a connection.
我知道这可能是由于连接未关闭造成的,我没有在我的代码中手动关闭连接或会话。
我想知道:
- 我创建的连接会自动关闭并return到连接池吗?
- 我的情况是连接没有释放造成的吗?
- 如何手动关闭连接?
如有任何帮助,我们将不胜感激!
备注:如果您post您的完整代码(包括执行了 50 次的调用)
,那将会很有帮助
Will connection create by my way close and return to connection pool automatically?
没有。尽管 Java 7(及更高版本)提供了所谓的 try-with-resources(请参阅 https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html )来自动关闭您的资源。 ,AFAIK,这种机制在 Scala 中不可用(如果这不是真的,请有人纠正我)。
尽管如此,Scala 还是提供了贷款模式(参见 https://wiki.scala-lang.org/display/SYGN/Loan ,尤其是 using
),它提供了一种最终关闭资源的 FP 方式。
Was my situation caused by connection didn't release?
只要你不提供你的完整代码,那只是一个猜测。是的,不关闭连接会使连接池超出,从而最终没有新的连接可用。
How to close a connection manually?
connection.close()
我正在以这种方式将 play-slick 与 slick 3.0.0 一起使用:
我通过
获得了联系val conn = db.createSession.conn
然后得到语句:
val statement = conn.prepareStatement(querySQL)
和return 结果集:
Future{statement.executeQuery()}
但是我遇到了一个问题:我尝试使用这个查询大约 50 次,然后,我得到了异常:
SQLTimeoutException: Timeout after 1000ms of waiting for a connection.
我知道这可能是由于连接未关闭造成的,我没有在我的代码中手动关闭连接或会话。
我想知道:
- 我创建的连接会自动关闭并return到连接池吗?
- 我的情况是连接没有释放造成的吗?
- 如何手动关闭连接?
如有任何帮助,我们将不胜感激!
备注:如果您post您的完整代码(包括执行了 50 次的调用)
,那将会很有帮助Will connection create by my way close and return to connection pool automatically?
没有。尽管 Java 7(及更高版本)提供了所谓的 try-with-resources(请参阅 https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html )来自动关闭您的资源。 ,AFAIK,这种机制在 Scala 中不可用(如果这不是真的,请有人纠正我)。
尽管如此,Scala 还是提供了贷款模式(参见 https://wiki.scala-lang.org/display/SYGN/Loan ,尤其是 using
),它提供了一种最终关闭资源的 FP 方式。
Was my situation caused by connection didn't release?
只要你不提供你的完整代码,那只是一个猜测。是的,不关闭连接会使连接池超出,从而最终没有新的连接可用。
How to close a connection manually?
connection.close()