引发几个疑问啊。
问题1:
使用数据库连接池得到的connection是不用程序关闭,连接池自己会把一定时间内没有使用的connection拿回到池里。----然后,我不知道这句话对不对。如果对,那么在spring中,hibernate中,很多都用了ThreadLocal来控制多线程中的事务,这样不会就有问题了吗?---连接池把con分给这个线程使用,放在ThreadLocal中,而一回收后又交给其他线程使用,放在ThreadLocal中,要是这些线程同时要做事务,同一个connection那还如何事务?
问题2:
人家都说调用connection的close()方法没关系,不会被关,怎么不会被关啊?
sun api文档方法说明:
引用
void close()
Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released.
如果我没理解错,调用此方法是主动去释放这个连接的资源,以代替数据库或者jdbc自动释放,不就是关闭吗?
除非是从数据库连接池里get到的connection是经过包装的。
比如
class MyConnection extends java.sql.Connection
{
@override
public void close()
{
//回收到连接池里
}
}
而连接池的代码,得到connection实际是它的子类MyConnection
class ConnectionPool ..
{
...
public Conncetion getConnection()
{
return new MyConnection(...);
}
...
}
硬是把close方法重写了,这样调用close时就不会被真正关闭。
我懒人一个,没去看开源的数据库连接池代码。不知以上的观点对不对,或者还有其他机制,或者我想得根本不对!
有人知道其真正原理吗?能讨论下原理吗?
分享到:
相关推荐
HikariCP 数据库连接池实战 HikariCP 是一个高性能的 Java 数据库连接池,由 Zachary Tong 开发并维护。它基于 Apache Commons DBCP,并进行了许多优化和改进,以提供更好的性能和可扩展性。 HikariCP 的核心理念...
Java 实现数据库连接池主要涉及两个关键点:减少使用者与连接池之间的耦合度和接管 `Connection.close()` 方法。为了实现这两个目标,我们可以利用 Java 的动态代理机制。 首先,了解数据库连接池的作用。连接池是...
- 获取和释放连接:通过数据源对象的getConnection()方法获取连接,使用完毕后调用Connection的close()方法,实际上将连接返回给连接池,而非真正关闭。 4. **连接池的优缺点** 优点: - 资源复用,提高性能。 ...
对于数据库连接池,我们可以通过动态代理来接管`java.sql.Connection`接口的方法,特别是`close()`方法。这样,当用户尝试关闭连接时,代理对象实际上不会立即关闭连接,而是将其返回到连接池中,供其他用户重复使用...
数据库连接池(Database Connection Pool)是一种管理数据库连接的机制,它允许应用程序重复使用已经存在的数据库连接,而不是每次需要时都创建新的连接。这样可以显著提高性能,减少系统资源的消耗,尤其是在高并发...
数据库连接池的出现解决了这个问题,它在应用程序启动时预创建一定数量的数据库连接,并存储在一个池中,当程序需要访问数据库时,可以从池中获取一个已经建立好的连接,使用完毕后再归还给池,而不是真正关闭连接。...
### 数据库连接池知识点详解 #### 一、数据库连接池概念与作用 数据库连接池是一种管理数据库连接的技术,它的主要作用在于复用已创建的数据库连接,并通过优化连接的管理和分配来提高应用程序的整体性能。在实际...
然后,通过DataSource的getConnection()方法获取连接,使用完毕后调用Connection的close()方法,但实际上连接并未真正关闭,而是返回到连接池中。 **Apache DBUtils简介** Apache的DBUtils是一个简单的JDBC工具包...
标题提到的"数据库连接池jar包.zip"显然包含了Druid数据库连接池的jar文件,供开发者在项目中使用。 `druid-1.0.15.jar` 是Druid连接池的核心库,包含了所有必需的类和方法,用于初始化、管理和维护数据库连接。这...
数据库连接池是一组预先初始化的数据库连接,当程序需要与数据库建立连接时,可以从池中获取一个已经存在的连接,而不是每次都创建新的连接。使用完毕后,连接不会立即关闭,而是返回到连接池中供后续使用。这样可以...
### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...
3. 连接池的实现: ConnectionPool 类使用 Java.sql.Connection 类来实现数据库连接池,该类提供了多个方法来管理数据库连接,包括获取连接、关闭连接、提交事务等。 三、Java 实现数据库连接池的实现代码 以下是 ...
本文将深入探讨如何使用Java代码来实现一个简单的数据库连接池,并解释其核心概念和工作原理。 连接池的基本思想是维护一组预初始化的数据库连接,当应用程序需要时,可以从池中获取一个连接,使用完毕后,再归还回...
### 数据库连接池-连接的关闭内幕 在深入探讨数据库连接池中连接关闭的问题之前,我们首先需要了解数据库连接池的基本概念以及它在现代应用程序中的重要性。数据库连接池是一种管理多个数据库连接的方法,旨在提高...
ASP.NET数据库连接池是提高应用程序性能的关键特性,尤其对于基于Web的应用和客户端/服务器Web服务。连接池通过重用已建立的数据库连接,减少了创建和销毁连接所需的时间,从而提升了整体性能。当应用程序打开一个...
数据库连接池在Java开发中扮演着至关重要的角色,它能够有效地管理和优化数据库连接,提高应用程序的性能和资源利用率。在给定的标题和描述中,我们聚焦于两个关键的库——`commons-dbcp.jar`和`commons-pool.jar`,...
在IT行业中,数据库连接池是优化应用程序性能的关键技术之一,特别是在使用Java服务器页面(JSP)进行Web开发时。数据库连接池允许程序高效地管理与数据库的连接,减少了创建和销毁连接的开销,提高了系统资源利用率...
本文将深入探讨数据库连接池的原理、作用,以及如何在Java Web环境中,特别是结合Tomcat服务器和JSP进行配置和使用。 首先,我们需要理解什么是数据库连接池。数据库连接池是一种管理数据库连接的技术,它预先创建...
4. **获取和关闭连接**:通过`dataSource.getConnection()`方法获取数据库连接,使用完毕后调用`Connection.close()`,实际上连接会被放回连接池,而不是真正关闭。 ```java Connection conn = dataSource.get...