c3p0是什么意思,c3p0全称

2022年 10月 19日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

1.c3p0是什么?

c3p0是一个库。它扩展了传统的jdbc数据库连接池,并且支持JDBC3规范和JDBC2的标准扩展。
2.为什么使用c3p0?

首先,c3p0是一种jdbc数据库连接池。那么为什么使用数据库连接池呢?因为数据库连接是一种关键的、有限的、昂贵的资源。传统的模式(如传统的java web项目中,servlet的beans中建立数据库连接),每次连接都需要验证用户,消耗了大量的时间和资源。而数据库连接池在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已经建立的空闲连接对象。使用完毕后,用户不关闭连接,而是将数据库连接对象放回连接池中。数据库连接池管理数据连接的建立、断开,同时监视数据库连接数量和使用情况。使用数据库连接池会显著提高整个应用程序的伸缩性(大大提高了连接数量)和健壮性(能够应对大量用户频繁连接数据库,减少系统资源的消耗),提高应用程序的性能指标。

3.java web项目中部署c3p0(MyEclipse)
---------------------?
作者:飞天小女警777?
来源:CSDN?
原文:https://blog.csdn.net/u014402683/article/details/74935581?
版权声明:本文为博主原创文章,转载请附上博文链接!

?

?

转自https://www.cnblogs.com/leeying/p/3745588.html

c3p0是什么

  c3p0的出现,是为了大大提高应用程序和数据库之间访问效率的。

  它的特性:

编码的简单易用连接的复用连接的管理

  说到c3p0,不得不说一下jdbc本身,c3p0愿意就是对数据库连接的管理,那么原有的概念还是得清晰:DriverManager、Connection、StateMent、ResultMent。

  jdbc:java database connective这套API,不用多说,是一套用于连接各式dbms或连接桥接器的api,两个层级:上层供应用方调用api,下层,定义了各个dbms的spi的api(具体文档见:这里)。

  主要要提的是:datasource、DriverManager,想到哪儿写到哪儿,datasource是更高级一点的api,原因在于相对对应用来说更透明。

  Connection:同dbms的逻辑链接,类似于session管理概念,?SQL statements are executed and results are returned within the context of a connection.

  jdbc的概念就到这里,平时用得比较多。

c3P0的概念

?

  c3p0的bean配置如下:

1 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 2 <property name="driverClass" value="${jdbc.driverClassName}" /> 3 <property name="jdbcUrl" value="${jdbc.url}" /> 4 <property name="user" value="${jdbc.username}" /> 5 <property name="password" value="${jdbc.password}" /> 6 <property name="checkoutTimeout" value="30000" /> 7 <property name="maxPoolSize" value="15" /> 8 <property name="idleConnectionTestPeriod" value="180" /> 9 <property name="maxIdleTime" value="180" />10 </bean>

还有一些配置选项,后续详细说明。可见c3p0的bean引用使用的是:ComboPooledDataSource,该类结构如下:

 

 

以上类图都不是很完全,不过大体能表达出类之间的原理:

1、bean:ComboPooledDataSource的父类:AbstractPoolBackedDataSource有一个poolmanager字段,存储着对pool管理器

2、获取ds.getConnection()链接对象时,内部使用getPoolManger()获取C3p0ConnectionPooledManager(mgr)对象,该manager管理着pool对象:C3P0PooledConnectionPool对象,mgr.getPool().checkoutPooledConnection()

3、自此该connection已经被获取到了

4、让我们看看该connection的真实面目吧:

?ProxyConnection。

5、因此其实原理是:

  从pool里获取到的connection,是proxy包装的connection,而对connection的释放或者重用,是pool的管理责任:初始化池大小,维护池的大小(expand或shrink),管理unused、expired、checkout、checkin连接。

真正底层的连接是jdbc自己的连接,而c3p0的管理部分,基本上使用的是synchronized关键字,使用timerTask定时器工作。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: