1

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

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

请回答我所有的问题。

4

1 回答 1

2

我正在回答这个问题,假设您通过使用 、 和 类来使用 Apache DBCPorg.apache.commons.pool.impl.GenericObjectPool进行org.apache.commons.dbcp.DataSourceConnectionFactory连接org.apache.commons.dbcp.PoolableConnectionFactoryorg.apache.commons.dbcp.PoolingDataSource

  • 我想知道那些标准池机制在连接重置期间将执行的逻辑是什么? 如果GenericObjectPool.testOnBorrow和设置为 true ,则将使用 in 中的集合GenericObjectPool.testOnReturn验证连接是否处于活动状态。如果验证失败,则删除 Connection 对象并创建新对象并将其添加到池中validationQueryPoolableConnectionFactory
  • DBConnectionPool 如何知道数据库连接超时?因为我们知道 conn.isClosed() 在这里无济于事。与上述机制相同
  • 是否每个数据库连接都会有一个与数据库服务器的 tcp 客户端套接字?是的
  • 最后是可取的吗?每当我将连接返回到池时;池应该关闭连接;如果连接存在超过约 10 分钟后创建?[~10 分钟服务器端连接超时变量]如果您认为它不应该产生不必要的网络流量,并且如果您有特殊理由这样做。你能行的。通过设置minEvictableIdleTimeMillis以及是否要根据空闲时间GenericObjectPool删除timeBetweenEvictionRunsMillis
于 2013-03-29T09:43:32.433 回答