在 MySql 的连接器 J 驱动程序的配置参考中,对使用autoReconnect属性发出警告购买者。我按照说明增加了服务器的wait_timeout。由于我使用的是 DBCP(在阅读了有关 Stackoverflow 击落 DBCP 的几篇文章后,我正在考虑转移到 c3po),可以使用autoReconnectForPools属性吗?在 DBCP 或任何连接池下启用它实际上会做什么?
3 回答
autoReconnect 将向客户端抛出 SQLException,但会尝试重新建立连接。
autoReconnectForPools 将在每次 SQL 执行之前尝试 ping 服务器。
过去我在使用 dbcp 时遇到过很多问题,尤其是断开连接。大多数都通过转移到c3p0得到解决。请注意,mysql 驱动程序具有 c3p0 (com.mysql.jdbc.integration.c3p0.MysqlConnectionTester) 的连接测试器。
此外,您可能需要查看:使用 JDBC 的连接池选项:DBCP vs C3P0
MySQL 的autoReconnect
功能已被弃用,因为它有很多问题(参考:官方文档)。
autoReconnectForPools
与 几乎没有关系autoReconnect
,更多的是与autoCommit
-reconnectAtTxEnd
当所有 3 个都是时true
,它将在每个事务结束时 ping 服务器,并在需要时自动重新连接。
DBCP 的连接验证是不完善的——即使testOnBorrow
设置了它,它有时也会从池中返回断开的连接(更不用说在每次借用之前测试连接是非常低效的)。
根据这篇文章,HikariCP 似乎是一个更好的池实现,因为它能够使用isValid()
比运行测试查询快得多的 JDBC4 API,并且专门设计为永远不会向客户端应用程序返回断开的连接。