В блоке ниже приведена ошибка.
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
}
Есть ли что-то очевидное, что я делаю неправильно, что приводит к тому, что эти обращения к базе данных настолько медленны и вызывают эту ошибку? При необходимости я могу предоставить дополнительную информацию.
EDIT: я получил одну рекомендацию, что проблема может быть ошибкой загрузчика классов, и что я могу ее решить, развернув проект как один .jar, а не запуская его с помощью sbt.
EDIT2: после дальнейшего осмотра выяснилось, что многие соединения остаются открытыми, что в конечном итоге привело к отсутствию соединений. Вероятно, это можно устранить, вызвав db.close(), чтобы закрыть соединение в соответствующее время.
EDIT3: Решено. Соединения, сделанные slick, превысили максимальные соединения, разрешенные моей конфигурацией mysql.