【问题标题】:SQLTimeoutException in play-slickplay-slick 中的 SQLTimeoutException
【发布时间】:2015-10-08 02:47:15
【问题描述】:

我以这种方式将 play-slick 与 slick 3.0.0 一起使用:

我得到了一个连接

val conn = db.createSession.conn

然后得到声明:

val statement = conn.prepareStatement(querySQL)

并返回结果集:

Future{statement.executeQuery()}

但我遇到了一个问题:我尝试使用此查询大约 50 次,然后出现异常:

SQLTimeoutException: 等待连接 1000 毫秒后超时。

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

我想知道:

  • 通过我的方式创建的连接会自动关闭并返回连接池吗?
  • 我的情况是连接没释放造成的吗?
  • 如何手动关闭连接?

任何帮助将不胜感激!

【问题讨论】:

    标签: scala playframework slick play-slick


    【解决方案1】:

    备注:如果您发布完整代码(包括执行 50 次的调用),这将非常有帮助

    通过我的方式创建的连接会自动关闭并返回连接池吗?

    没有。尽管 Java 7(及更高版本)提供了所谓的 try-with-resources(参见 https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html )来自动关闭您的资源。 ,AFAIK,这种机制在 Scala 中不可用(请纠正我,如果这不是真的)。 尽管如此,Scala 提供了 LOAN-Pattern(参见 https://wiki.scala-lang.org/display/SYGN/Loan,尤其是 using),它提供了一种最终关闭资源的 FP 方式。

    我的情况是连接没释放造成的吗?

    只要你不提供你的完整代码,那只是一个猜测。是的,不关闭连接会使连接池超出,因此最终没有可用的新连接。

    如何手动关闭连接?

    connection.close()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-26
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多