欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java数据库连接池之c3p0简介_动力节点Java学院整理

程序员文章站 2024-02-17 08:57:34
c3p0是什么 c3p0的出现,是为了大大提高应用程序和数据库之间访问效率的。 它的特性: 编码的简单易用 连接的复用 连接的管理 说到...

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配置如下:

<bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource" destroy-method="close">
  <property name="driverclass" value="${jdbc.driverclassname}" />
  <property name="jdbcurl" value="${jdbc.url}" />
  <property name="user" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <property name="checkouttimeout" value="30000" />
  <property name="maxpoolsize" value="15" />
  <property name="idleconnectiontestperiod" value="180" />
  <property name="maxidletime" value="180" />
 </bean>

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

Java数据库连接池之c3p0简介_动力节点Java学院整理

Java数据库连接池之c3p0简介_动力节点Java学院整理

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

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定时器工作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。