Scala / Slick,“等待连接20000ms后超时”错误

时间:2015-08-10 22:39:37

标签: mysql scala sbt slick hikaricp

下面的代码块一直在抛出错误。

  Timeout after 20000ms of waiting for a connection.","stackTrace":[{"file":"BaseHikariPool.java","line":228,"className":"com.zaxxer.hikari.pool.BaseHikariPool","method":"getConnection"

另外,我的数据库访问看起来太慢了,xs.map()的每个元素大约需要1秒。下面,getFutureItem()调用db.run()。

xs.map{ x => 
    val item: Future[List[Sometype], List(Tables.myRow)] = getFutureItem(x)         
    Await.valueAfter(item, 100.seconds) match {
        case Some(i) => i
        case None => println("Timeout getting items after 100 seconds")
    }
}

Slick使用“x”值的每次迭代记录此内容:

[akka.actor.default-dispatcher-3] [akka://user/IO-HTTP/listener-0/24] Connection was PeerClosed, awaiting TcpConnection termination...
[akka.actor.default-dispatcher-3] [akka://user/IO-HTTP/listener-0/24] TcpConnection terminated, stopping
[akka.actor.default-dispatcher-3] [akka://system/IO-TCP/selectors/$a/0] New connection accepted
[akka.actor.default-dispatcher-7] [akka://user/IO-HTTP/listener-0/25] Dispatching POST request to http://localhost:8080/progress to handler Actor[akka://system/IO-TCP/selectors/$a/26#-934408297]

我的配置:

"com.zaxxer" % "HikariCP" % "2.3.2"

default_db {
  url = ...
  user = ...
  password = ...
  queueSize = -1
  numThreads = 16
  connectionPool = HikariCP
  connectionTimeout = 20000
  maxConnections = 40
}

是否有任何明显的错误导致这些数据库访问速度如此之慢并抛出此错误?如果需要,我可以提供更多信息。

编辑:我收到一条建议,问题可能是类加载器错误,我可以通过将项目部署为单个.jar来解决它,而不是使用sbt运行它。

EDIT2:经过进一步检查后,似乎许多连接处于打开状态,最终导致无法连接。这可以通过调用db.close()来在适当的时候关闭连接来解决。

EDIT3:解决了。 slick建立的连接超出了我的mysql配置允许的最大连接数。

1 个答案:

答案 0 :(得分:2)

OP写道:

  

EDIT2:经过进一步检查后,似乎许多连接处于打开状态,最终导致无法连接。这可以通过调用db.close()来在适当的时候关闭连接来解决。

     

EDIT3:解决了。 slick建立的连接超出了我的mysql配置允许的最大连接数。