JDBC连接池管理

时间:2012-10-10 11:35:25

标签: java jdbc datasource connection-pooling

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

Connection conn = dataSource.getConnection();

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

conn.close();

我的问题是:conn.close()非常接近,所以当连接像conn.close()一样关闭时,数据源是如何做的。我听说数据源连接关闭并不是很接近,只是发布,但是我找不到数据源类的发布API。我想知道datasource如何管理数据库连接的创建,关闭和发布。

顺便提一下:数据源如何刷新连接,我的意思是如果数据源的连接未使用一年,数据源如何保持连接可用?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

如果您想知道连接池管理连接的确切程度,请检查documentation of your connection pool implementation

答案 1 :(得分:0)

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