Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 JDBC连接池管理_Java_Jdbc_Datasource_Connection Pooling - Fatal编程技术网

Java JDBC连接池管理

Java JDBC连接池管理,java,jdbc,datasource,connection-pooling,Java,Jdbc,Datasource,Connection Pooling,我使用org.apache.commons.dbcp.BasicDataSource作为我的数据源实现,我的代码获取连接并关闭连接,如下所示: Connection conn = dataSource.getConnection(); 当我完成连接工作时,我将关闭它 conn.close(); 我的问题是:conn.close()确实是关闭的,所以当连接像conn.close()一样关闭时,数据源是如何工作的。我听说datasource连接close不是真正的close,只是release,

我使用
org.apache.commons.dbcp.BasicDataSource
作为我的数据源实现,我的代码获取连接并关闭连接,如下所示:

Connection conn = dataSource.getConnection();
当我完成连接工作时,我将关闭它

conn.close();
我的问题是:
conn.close()
确实是关闭的,所以当连接像
conn.close()
一样关闭时,数据源是如何工作的。我听说datasource连接close不是真正的close,只是release,但是我在datasource类中找不到release API。我想知道datasource如何管理数据库连接的创建、关闭和释放

顺便问一个小问题:datasource如何刷新连接,我的意思是,如果datasource的连接已经一年没有使用,datasource如何保持连接可用?

对来自datasource的连接调用
close()
并不一定关闭数据库连接。它只会返回到池的连接以供重用。这样做的方式是,到数据库的实际连接被一个
PooledConnection
类修饰,这个
PooledConnection
上的
close()
方法被覆盖,只将连接标记为可用。

DataSource
javax.sql.DataSource
)表示可以从中获取数据库连接的抽象概念

因此,
DataSource
本身没有定义如何管理连接的任何细节,而
DataSource
的不同实现可能以不同的方式管理连接:

  • 一个简单的实现(例如Spring的
    DriverManager数据源
    )可能会在每次请求时创建一个新连接,在这种情况下
    close()
    实际上会关闭连接

  • 由连接池(如ApacheDBCP或c3p0)支持的实现从连接池返回现有连接<这种实现返回的code>Connection对象是一个代理,它的
    close()
    方法被重写以返回到池的连接,而不是关闭它


如果您想知道您的连接池是如何管理连接的,请检查。

Hi-Axtavt,谢谢您的回答,很抱歉我附加了一个小问题,connectionpool如何保持每个连接可用,我认为通过刷新连接或定期ping数据库?@Jack:这取决于连接池的实现。对于Apache DBCP,请参见上面的文档链接,
PooledConnection
表示池中的物理连接,它创建一个逻辑
连接
(例如一个普通物理
连接的代理,该连接在
Close()
上执行其他操作)。该逻辑连接随后由数据源分发给用户。