我正在使用org.apache.commons.dbcp.BasicDataSource
作为我的数据源实现,我的代码获取连接并关闭连接,如下所示:
Connection conn = dataSource.getConnection();
当我完成连接工作时,我将关闭它
conn.close();
我的问题是:conn.close()
非常接近,因此当连接关闭时,如 conn.close()
,数据源做得怎么样。我听说数据源连接关闭并不是真正关闭,只是释放,但我无法从数据源类中找到释放API。我想知道datasource如何管理数据库连接的创建、关闭和释放。
顺便问一个小问题:数据源如何刷新连接,我的意思是如果数据源的连接一年没有使用,数据源如何保持连接可用?
最佳答案
DataSource
( javax.sql.DataSource
) 表示可以从中获取数据库连接的抽象概念。
所以,DataSource
本身没有定义如何管理连接的任何细节,以及 DataSource
的不同实现可以通过不同的方式管理连接:
简单的实现(例如 Spring 的
DriverManagerDataSource
)可能会在每次请求时创建一个新连接,在本例中close()
实际上关闭连接。由连接池(例如 Apache DBCP 或 c3p0)支持的实现会从池中返回现有连接。
Connection
这种实现返回的对象是一个代理,其close()
方法被重写以将连接返回到池而不是关闭它。
如果您想了解连接池如何准确地管理连接,请查看 documentation of your connection pool implementation .
关于java - JDBC连接池管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818385/