scala - Slick/HikariCP/MySQL 总是超时
问题描述
我正在使用带有 Slick 的 Play (2.6),我的数据库连接每隔第二次或第三次尝试就会超时。重新建立连接的唯一方法是使用 重新启动应用程序sbt run
。这让我发疯,任何帮助表示赞赏。
需要明确的是,我将 Slick 与本地 MySQL 数据库一起使用,以实现非常轻量级的使用。
构建.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"
应用程序.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
它工作正常。
解决方案
推荐阅读
- javascript - 跨站点脚本(基于 DOM)的打嗝问题
- javascript - 复选框的奇怪 onclick 行为。选择复选框项目时尝试写入浏览器控制台
- dart - 非标准 Dart Web 文件夹
- python - How to get content length for google drive download ?
- python - 替换pytest中的测试用例继承?
- angular - Angular 6延迟加载引发错误
- networking - 如何将电脑变成本地网络设备的云服务器
- file - 用于安装程序的 Bat 文件 - 进行一次安装,等待安装完成
- react-native - react-native: LayoutAnimation 和 useNativeDriver: true for flex
- mongodb - findOneAndUpdate 不创建 ObjectId