在MySql的connector J driver的配置参考中,在使用autoReconnect属性时发出了一个购买者警告。我按照说明操作并增加了服务器的wait_timeout。由于我正在使用DBCP (在阅读了几篇关于栈溢出攻击DBCP的帖子后,我正在考虑迁移到c3po ),可以使用autoReconnectForPools属性吗?当在DBCP或任何连接池中启用它时,它实际上做了什么?
发布于 2009-04-02 14:34:32
autoReconnect将向客户端抛出一个SQLException,但会尝试重新建立连接。
autoReconnectForPools将尝试在每次执行SQL之前ping服务器。
在过去,我对dbcp有很多问题,特别是断开连接。大多数都是通过迁移到c3p0来解决的。请注意,mysql驱动程序具有用于(com.mysql.jdbc.integration.c3p0.MysqlConnectionTester). c3p0的连接测试器。
此外,您可能还想查看以下内容:Connection pooling options with JDBC: DBCP vs C3P0
发布于 2015-04-07 03:07:16
MySQL的autoReconnect
功能被弃用,因为它有很多问题(参考:官方documentation)。
autoReconnectForPools
与autoReconnect
没有什么关系,它与autoCommit
和reconnectAtTxEnd
有更多的关系-当这3个都是true
时,它会在每个事务结束时ping服务器,并在需要时自动重新连接。
DBCP的连接验证并不完美-即使设置了testOnBorrow
,它有时也会从池中返回断开的连接(更不用说在每次借用之前测试连接是非常低效的)。
根据this article的说法,HikariCP似乎是一个更好的池实现,因为它能够使用JDBC4 isValid()
API,这比运行测试查询快得多,并且经过专门设计,永远不会向客户端应用程序返回断开的连接。
发布于 2012-06-06 13:32:43
您确定您正在正确地使用DBCP吗?
根据short configuration notes的说法,它应该能够很好地处理超时,这要归功于testOnBorrow=true
的默认值(在使用之前测试连接,如果连接失败,它将从池中删除,我们将尝试获得一个新的连接)。
您唯一需要做的就是确保将validationQuery
属性配置为非空字符串,例如对于MySQL数据库,"SELECT 0“(here是关于每个使用的DB的不同validationQuery值的帖子)。
https://stackoverflow.com/questions/527061
复制相似问题