Блок кода ниже вызывает ошибку.
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.
РЕДАКТИРОВАТЬ 2: после дальнейшей проверки выяснилось, что многие соединения оставались открытыми, что в конечном итоге привело к тому, что соединения были недоступны. Скорее всего, это можно решить, вызвав db.close(), чтобы закрыть соединение в нужное время.
EDIT3: решено. Соединения, сделанные slick, превысили максимальное количество соединений, разрешенных моей конфигурацией mysql.