java应用开发中经常有程序员讲需要配置数据库连接池,如果不配置连接池,应用在大量用户访问的情况下会发生数据库连接异常,也就是会说连不上数据库,然后如数家珍的列举一大堆连接池组件,比如:dbcp、c2p0、bonecp。。。。,各个都系出名门,都号称具有什么什么优势,更有好事者自己开发一个连接池。那为什么要引入连接池呢?换句话说引入连接池会带来什么好处呢?下面就让我们来分析一下,探测一下谜底。
数据库连接的原理
数据库连接的本底上都是tcp连接,tcp连接位于osi的4层上,所有的数据库驱动都在7层上实现自己的协议。数据库连接的协议一般都是二进制的协议。应用程序和数据库每建一个数据库其实就是在底层建立了一个tcp线路,tcp线路是有底层的操作系统实现的,每个线路占用两个端口,发送端口和接收端口,这两个端口在数据交换过程中会互换角色,时而发送、时而接收。当web应用连接mysql数据库时,目标的接收端口是3306,连接时3306要被明确的指定,此时web应用方也有一个端口被占用,这个端口不需要被明确的指定,是操作系统自动分配的。操作系统的端口数是有限的,一般缺省可能是1024,不同的操作系统会有所不同,每一个socket也是占用资源的,一般叫socket的资源描述符,这些资源对于操作系统来说也是有限的,linux下通过ulimit命令可以指定更多资源。
连接无法打开原因
1.占用端口不释放,每一个socket在调用close后,socket会处于Time_wait状态,处于此状态的socket需要经过一段时间才能释放,这个释放时间随不同的操作系统而不同,socket的不释放导致端口不释放,再次连接时操作系统分配不出端口
2.socket文件描述符不释放,还是上面的原因,socket资源不释放,操作系统不能分配新的资源
[编辑]建立连接的资源开销
java的数据库连接相对来说是重量级的,构建一个连接的系统开销很大,不停的关闭、创建数据库连接对应用系统来说开销太大
[编辑]连接池的应用
连接池是存储、管理数据库连接的容器,应用程序把获取数据库连接的功能委托给连接池,每个连接池都有一个上限,如果连接池达到上限,应用程序线程申请连接时被堵塞,等待其他线程释放连接,每个线程使用完连接后并不马上关闭,至少把它返还给连接池。由于连接的共享,不会频繁的创建、销毁连接,因此就不会增加创建连接的开销,也不会出现socket释放延迟现象。
[编辑]其他
1.jndi连接池是整个web容器持有,容器内所有的应用共享,有可能造成应用之间的竞争
2.应用级的连接池,粒度较小,容易控制
3.hibernate只支持c3p0
分享到:
相关推荐
总的来说,C3P0作为一款成熟的数据库连接池,对于Java开发者来说,是一个值得信赖的工具,可以帮助我们更有效地管理和使用数据库连接,提升应用程序的性能和可靠性。在实际项目中,根据具体需求合理配置C3P0,可以更...
开源数据库连接池c3p0是一款广泛应用于Java后端开发中的数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用的性能和响应速度。c3p0的主要功能包括连接池的创建、维护以及自动回收资源,使得多个并发...
基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-...
在本压缩包“数据库连接池C3P0.zip”中,包含了C3P0数据库连接池的相关jar包以及配置文件,用于帮助开发者集成到他们的Java应用中,特别是与MYSQL数据库配合使用。 C3P0的主要特性包括: 1. **连接池管理**:C3P0...
C3P0数据库连接池和jar包,因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉。而每次新建连接都需要140毫秒左右的时间,所以耗费时间比较多。若使用C3P0连接池来池化...
本文将深入探讨数据库连接池的概念,重点介绍C3P0连接池及其所需的JAR包。 首先,数据库连接池是一种在应用服务器启动时预创建并维护一定数量的数据库连接的机制。这些连接可以被多个并发请求共享,而不是每个请求...
**c3p0数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的主要功能是管理数据库连接,通过复用已存在的连接来提高数据库访问效率,减少系统资源...
**c3p0数据库连接池案例** 在Java开发中,数据库连接池是管理数据库连接的重要工具,它能够有效地提高数据库操作的效率并节省系统资源。C3P0是一款开源的数据库连接池组件,由Maurice Priess创建,被广泛应用于各种...
DBCP(Apache Commons DBCP)和C3P0是两种常见的开源数据库连接池实现,它们允许开发者有效地管理和重用数据库连接,避免了每次请求数据库时创建新的连接,从而降低了系统的资源消耗。 DBCP,全称为Apache Commons ...
Java数据库连接池C3P0是一种常用的开源数据库连接管理工具,它通过提供连接池服务,提高了应用程序处理数据库连接的效率,降低了系统资源的消耗。在Java应用中,尤其是在服务器端,数据库连接的创建和关闭是相对耗时...
数据库连接池的基本原理就是为数据库建立一个缓冲池。在缓冲池中先创建指定数量的数据库连接,当有连接请求时就从缓冲池中取出处于“空闲”状态的连接,并将此连接标记为“忙碌”,直到该请求进程结束后,它所使用的...
本压缩包包含了两种常用的数据库连接池实现:C3P0和Druid,它们都是为了优化数据库连接创建与管理而设计的。 1. C3P0连接池: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准...
C3P0是一个开源的Java数据库连接池实现,它提供了一种灵活且功能丰富的数据库连接管理方式。在本文中,我们将深入探讨C3P0库以及如何在项目中使用jar包来实现数据库连接池。 C3P0是由M EHood创建的,它的全称是...
C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个压缩包包含了C3P0的0.9.5.2版本,以及相关的依赖库。下面将详细介绍C3P0的功能、工作原理以及如何使用。 C3P0...
**c3p0数据库连接池**是Java应用中广泛使用的第三方数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用程序的性能和效率。c3p0库通过提供连接池功能,使得数据库连接可以被多个并发请求共享,避免了...
本资源包包含三个主流的数据库连接池实现:c3p0、dbcp和Druid。它们各有特点,适应不同的应用场景。 1. **c3p0**:全称为Com形3P0,是由Miquel Arquero开发的一个开源的JDBC连接池。c3p0提供了完善的连接池管理和...
C3P0数据库连接池是Java开发中常用的一个开源组件,它主要用于管理数据库连接,以提高应用程序处理数据库的效率和性能。C3P0是由Mithral Software公司开发的,其全称为Comerica Commercial Connection Pool,是一款...
本案例将介绍三种常见的数据库连接池实现:C3P0、Druid以及自定义连接池的实现。 首先,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特性包括连接测试、...
数据库连接池jar包,包含c3p0、druidjar包和依赖jar包,c3p0通过配置文件xml或者properties读取连接对象 druid通过properties读取连接,使用springJDBC JdbcTempalte简化sql操作