连接重置期间DBConnectionPool的行为方式

时间:2013-03-28 18:39:23

标签: java jdbc database-connection connection-pooling

在我们的项目中,我们维护自己的数据库连接池。
为了解决问题'java.sql.SQLRecoverableException: Io exception,大多数人建议使用像apache dbcp这样的标准连接池。

  • 我想知道这些标准池机制在连接重置期间将执行的逻辑是什么?
  • DBConnectionPool如何知道数据库连接已超时?因为我们知道conn.isClosed()在这里没有帮助。
  • 每个数据库连接是否都有一个带有DB服务器的tcp客户端套接字?
  • 最后是可取的;每当我返回到游泳池的连接;游泳池应关闭连接;如果连接存在超过约10分钟,则返回? [〜10分钟服务器端conn超时变量]

请回答我的所有问题。

1 个答案:

答案 0 :(得分:2)

我正在回答这个问题,假设您使用Apache org.apache.commons.pool.impl.GenericObjectPoolorg.apache.commons.dbcp.DataSourceConnectionFactoryorg.apache.commons.dbcp.PoolableConnectionFactoryorg.apache.commons.dbcp.PoolingDataSource类来使用Apache DBCP进行连接池。

  • 我想知道那些标准池机制的逻辑是什么 连接重置期间会执行吗? 如果GenericObjectPool.testOnBorrowGenericObjectPool.testOnReturn设置为真,则会使用validationQuery中的PoolableConnectionFactory设置验证连接是否处于活动状态。如果验证失败,将删除Connection对象并创建新对象并将其添加到池
  • DBConnectionPool如何知道数据库连接已超时?以来 我们知道conn.isClosed()在这里不会有用。 与上述机制相同
  • 每个数据库连接是否都有一个带有DB的tcp客户端套接字 服务器?的
  • 最后是可取的;每当我将连接返回到 池;游泳池应关闭连接;如果连接存在 距它创造了超过10分钟? [~10分钟服务器端conn 超时变量] 如果您认为它不会创建不必要的网络流量,并且您有特殊的理由这样做。你能行的。如果要根据空闲时间删除,请设置minEvictableIdleTimeMillis中的GenericObjectPooltimeBetweenEvictionRunsMillis