java - JDBC连接池管理

标签 java jdbc datasource connection-pooling

我正在使用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/

相关文章:

vb.net - 将组合框和列表框绑定(bind)到列表时出现问题 (VB.NET)

java - 如何映射 Java Web 服务的数据源

java - JMeter 是否适用于 OpenJDK 13?

java - jdbc java.sql.preparedstatement 在插入期间复制行

java - 关闭语句是否足够好,还是我们还必须关闭每个结果集?

java - JDBC 中的连接是什么?

java - 如何提供关闭 Internet Explorer 窗口的确认?

java - Spring hibernate 恩弗斯 : Capture entity being modified

java - 返回 x param 匿名对象

java - 我的表中不存在列 @Entity @Column