Slick / HikariCP / MySQL всегда тайм-аут - PullRequest
0 голосов
/ 06 июля 2018

Я использую Play (2.6) с Slick, время соединения с базой данных истекает каждую вторую или третью попытку. Единственный способ восстановить соединение - перезапустить приложение с помощью sbt run. Это сводит меня с ума, любая помощь приветствуется.

Чтобы было ясно, я использую Slick с локальной базой данных MySQL для очень легкого использования.

build.sbt

libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.11"
libraryDependencies += "com.typesafe.slick" %% "slick" % "3.2.3"
libraryDependencies += "com.typesafe.slick" %% "slick-hikaricp" % "3.2.3"

application.conf

# db connections = ((physical_core_count * 2) + effective_spindle_count)
fixedConnectionPool = 5

repository.dispatcher {
  executor = "thread-pool-executor"
  throughput = 1
  thread-pool-executor {
    fixed-pool-size = ${fixedConnectionPool}
  }
}

Сообщение об ошибке:

java.sql.SQLTransientConnectionException: <dbconfig> - Connection is not available, request timed out after 1001ms.

Трассировка стека:

com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:14)
slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:453)
slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:46)
slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:37)
slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:249)
slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:248)
slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:37)
slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:274)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

Обновление

Я не включил конкретную конфигурацию БД в application.conf:

<name> {
  slick.driver = scala.slick.driver.MySQLDriver
  driver = "com.mysql.cj.jdbc.Driver"
  url = __
  user = __
  password = __
}

Я добавил в конфиг:

  keepAliveConnection = true
  connectionPool = disabled

И работает нормально.

...