MySql connector/J 中的 autoReconnect 和 autoReconnectForPools 有什么区别?

2022-09-02 13:01:25

在 MySql 连接器 J 驱动程序的配置参考中,在使用 autoReconnect 属性时会发出警告 emptor。我按照说明操作并增加了服务器的wait_timeout。由于我正在使用DBCP(在阅读了Stackoverflow击落DBCP的几篇文章后,我正在考虑迁移到c3po),可以使用autoReconnectForPools属性吗?在 DBCP 或任何连接池下启用时,它实际上做了什么?


答案 1

autoReconnect 会向客户端抛出一个 SQLException,但会尝试重新建立连接。

autoReconnectForPools 将尝试在每次执行 SQL 之前 ping 服务器。

我过去在dbcp上遇到很多问题,尤其是断开连接。大多数都是通过迁移到c3p0来解决的。请注意,mysql 驱动程序具有用于 c3p0 的连接测试器 (com.mysql.jdbc.integration.c3p0.MysqlConnectionTester)。

另外,您可能需要查看以下内容:使用 JDBC 的连接池选项:DBCP 与 C3P0


答案 2

MySQL的功能已被弃用,因为它存在许多问题(参考:官方文档)。autoReconnect

autoReconnectForPools与 没有多少关系,它与和有更多关系 - 当所有3个都时,它将在每个事务结束时ping服务器,并在需要时自动重新连接。autoReconnectautoCommitreconnectAtTxEndtrue

DBCP 的连接验证并不完美 - 即使设置了,它有时也会从池中返回断开的连接(更不用说在每次借用之前测试连接都是非常低效的)。testOnBorrow

根据本文,HikariCP似乎是一个更好的池实现,因为它能够使用JDBC4 API,这比运行测试查询快得多,并且专门设计用于永远不会将断开的连接返回到客户端应用程序。isValid()


推荐