游戏中的 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.

我知道这可能是由于连接未关闭造成的,我没有在我的代码中手动关闭连接或会话。

我想知道:

如有任何帮助,我们将不胜感激!

备注:如果您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()