play-slick中的SQLTimeoutException

时间:2015-10-08 02:47:15

标签: scala playframework slick play-slick

我以这种方式使用光滑的3.0.0播放光滑:

我通过

建立联系
val conn = db.createSession.conn

然后得到声明:

val statement = conn.prepareStatement(querySQL)

并返回ResultSet:

Future{statement.executeQuery()}

但是我遇到了一个问题:我尝试使用这个关于 50 次的查询,然后,我得到了例外:

  

SQLTimeoutException:等待连接1000ms后的超时。

我知道这可能是因为连接没有关闭而且我没有手动关闭代码中的连接或会话。

我想知道:

  • 通过我的方式创建连接会自动关闭并自动返回连接池吗?
  • 我的情况是由连接引起的吗?
  • 如何手动关闭连接?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

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

  

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

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

  

我的情况是由连接引起的吗?

只要您不提供完整代码,这只是猜测。是的,不关闭连接会使连接池超出,从而最终没有新的连接可用。

  

如何手动关闭连接?

connection.close()