mysql scala sbt slick hikaricp

mysql - Scala/Slick, error "Tiempo de espera después de 20000 ms de esperar una conexión"



sbt hikaricp (1)

El bloque de código de abajo ha estado lanzando un error.

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

Además, los accesos a mi base de datos parecen demasiado lentos, y cada elemento de xs.map () tarda aproximadamente 1 segundo. A continuación, getFutureItem () llama a 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 registra esto con cada iteración de un valor "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]

Mi configuración:

"com.zaxxer" % "HikariCP" % "2.3.2" default_db { url = ... user = ... password = ... queueSize = -1 numThreads = 16 connectionPool = HikariCP connectionTimeout = 20000 maxConnections = 40 }

¿Hay algo obvio que estoy haciendo mal que está causando que estos accesos a la base de datos sean tan lentos y lancen este error? Puedo proporcionar más información si es necesario.

EDITAR: Recibí una recomendación de que el problema podría ser un error del cargador de clases y que podría resolverlo implementando el proyecto como un único .jar, en lugar de ejecutarlo con sbt.

EDIT2: Después de una inspección adicional, parece que muchas conexiones se dejaron abiertas, lo que finalmente hizo que no hubiera conexiones disponibles. Es probable que esto se pueda resolver llamando a db.close () para cerrar la conexión en el momento adecuado.

EDIT3: resuelto. Las conexiones realizadas por Slick superaron las conexiones máximas permitidas por mi configuración mysql.


OP escribió:

EDIT2: Después de una inspección adicional, parece que muchas conexiones se dejaron abiertas, lo que finalmente hizo que no hubiera conexiones disponibles. Es probable que esto se pueda resolver llamando a db.close () para cerrar la conexión en el momento adecuado.

EDIT3: resuelto. Las conexiones realizadas por Slick superaron las conexiones máximas permitidas por mi configuración mysql.