1

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

Connection conn = dataSource.getConnection();

当我完成连接工作时,我将关闭它

conn.close();

我的问题是:conn.close()真的很接近,所以当连接关闭时conn.close(),数据源的表现如何。我听说数据源连接关闭并不是真的关闭,只是发布,但我无法从数据源类中找到发布API。我想知道数据源如何管理数据库连接的创建、关闭和释放。

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

4

2 回答 2

2

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

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

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

  • 由连接池(例如 Apache DBCP 或 c3p0)支持的实现从池中返回现有连接。Connection这种实现返回的对象是一个代理,并且它的close()方法被覆盖以返回到池的连接而不是关闭它。

如果您想知道您的连接池是如何管理连接的,请查看您的连接池实现的文档

于 2012-10-10T12:03:38.680 回答
0

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

于 2012-10-10T11:55:51.323 回答