Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DBConnectionPool在连接重置期间的行为_Java_Jdbc_Database Connection_Connection Pooling - Fatal编程技术网

Java DBConnectionPool在连接重置期间的行为

Java DBConnectionPool在连接重置期间的行为,java,jdbc,database-connection,connection-pooling,Java,Jdbc,Database Connection,Connection Pooling,在我们的项目中,我们维护自己的数据库连接池 为了解决这个问题,大多数人建议使用标准连接池,如apache dbcp 我想知道在连接重置期间,标准池机制将执行什么逻辑 DBConnectionPool如何知道DB连接已超时?因为我们知道conn.isClosed()在这里帮不上忙 是否每个db连接都有一个带有db服务器的tcp客户端套接字 最后是明智的;每当我返回到池的连接时;池应关闭连接;如果连接存在时间超过10分钟,是否返回? [~10分钟服务器端连接超时变量] 请回答我所有的问题 我在回

在我们的项目中,我们维护自己的数据库连接池
为了解决这个问题,大多数人建议使用标准连接池,如apache dbcp

  • 我想知道在连接重置期间,标准池机制将执行什么逻辑
  • DBConnectionPool如何知道DB连接已超时?因为我们知道conn.isClosed()在这里帮不上忙
  • 是否每个db连接都有一个带有db服务器的tcp客户端套接字
  • 最后是明智的;每当我返回到池的连接时;池应关闭连接;如果连接存在时间超过10分钟,是否返回? [~10分钟服务器端连接超时变量]

请回答我所有的问题

我在回答这个问题时假设您通过使用
org.Apache.commons.pool.impl.genericopobjectpool
org.Apache.commons.DBCP.DataSourceConnectionFactory
,将Apache DBCP用于连接池,
org.apache.commons.dbcp.PoolableConnectionFactory
org.apache.commons.dbcp.PoolgDataSource

  • 我想知道那些标准池机制的逻辑是什么 将在连接重置期间执行吗? 如果
    GenericObjectPool.testOnBorrow
    GenericObjectPool.testOnReturn
    设置为true,则将使用
    PoolableConnectionFactory
    中设置的
    验证查询
    验证连接是否处于活动状态。如果验证失败,则删除连接对象并创建新对象并将其添加到池中
  • DBConnectionPool如何知道DB连接已超时?自从 我们知道conn.isClosed()在这里帮不上忙与上述机制相同
  • 是否每个db连接都将有一个带有db的tcp客户端套接字 服务器
  • 最后是明智的;每当我将连接返回到 水塘池应关闭连接;如果连接存在 从它创建起超过10分钟?[~10分钟服务器端连接 超时变量]如果您认为它不会产生不必要的网络流量,并且您有特殊理由这样做。你能做到。如果要基于空闲时间删除,请在
    GenericObjectPool
    中设置
    minEvictableIdleTimeMillis
    以及
    timeBetweenEvictionRunsMillis

您的意思是,无论何时请求新连接;池将在DB上执行测试查询(validationQuery),以验证TCP状态。如果查询成功,则池将返回该连接??如果使用数据库池,则无法控制新连接。由池决定何时创建新连接。但是,正如第一个问题的答案所解释的那样,testOnBorrow和testOnReturn可用于在将现有连接提供给用户之前验证它们的状态。检查这些行并调用validateObject,这就是turn validateConnection,它使用JDBC语句执行validationQuery。如果SQL执行失败(由于连接丢失、超时、网络拥塞)或validationQuery未能返回结果,validateObject将返回false,这意味着连接无效。+1。非常感谢。那么我的第一条评论在我的自定义池中是有效的;在从我的池返回到应用程序的连接之前,我还应该维护验证查询执行?