c3p0、dbcp、druid对比

c3p0、dbcp、druid对比

c3p0、dbcp、druid对比

c3p0、dbcp、druid三大连接池的区别
c3p0 开放的源代码的JDBC连接池,
DBCP 依赖Jakarta commons-pool对象池机制的数据库连接池  
druid 阿里出品,淘宝与支付宝专用的数据库连接池,它还包括了一个ProxyDriver、一系列内置的JDBC组件库,一个SQL Parser。支持所有JDBC兼容的数据库
属性对比
连接池的配置大体可以分为:基本配置、关键配置、性能配置等主要配置
基本配置:连接池进行数据库连接的四个必须配置
基本配置   DBPC C3P0 Druid
用户名 username uer username
密码 password password password
URL url jdbcUrl jdbcUrl
驱动类名 driverClassName driverClass driverClassName
注:在Druid连接池配置中,driverClassName可配可不配,不配置的话可以根据url自动识别数据库类型,然后选择相应的driverClassName。
关键配置:为了发挥数据库连接池的作用。
关键配置   DBCP c3p0 Druid
最小连接数 minldle(0) miniPoolSize(3) minldle(0)
初始化连接数 innitialSize(0) initialPoolSize(3) initialSize
最大连接数 maxTotal(8) maxPoolSize(15) maxActive(8)
最大等待时间 maxWaitMillis(毫秒) maxIdleTime(0秒) maxWait(毫秒)
说明 最小连接数 是数据库一直保持的数据库连接数
初始化连接数 连接池启动时创建的初始化数据库连接数量
最大连接数 连接池能申请的最大连接数,请求超出此数时,后面的数据库连接请求被加入等待队列中。
最大等待时间 当没有可用连接时,连接池等待连接被归还的最大时间,超过时间则抛出异常,可设置为0或负数,无限等待。
在DBCP连接池的配置中,还有一个maxldle的属性,表示最大空闲连接数,超过的空闲连接将被释放。                             对应的该属性在Druid中不再使用,配置了也不会有效果;而c3p0就没有对应的属性。
数据库连接池在初始化的时候回创建initialSize个连接,当有数据库操作时,会从池中取出一个连接。                                如果连接数等于maxActive,则会等待一段时间,等待其他操作释放掉一个连接,如果这个时间超过了maxWait,就会报错               如果当前使用的数量没有达到maxActive,则会判断当前是否空闲连接,有的话,直接使用空闲连接,没有的话,则新建一个连接。           连接使用完毕后,放入池中,等待其他操作复用。      
性能配置:预缓存设置、连接有效性检测设置、连接超时关闭设置
  预缓存设置:用于控制PreparedStatement数量,提升数据库性能。
预缓存   DBCP c3p0 Druid
开启缓存功能 poolPreparedStatements maxStatements poolPreparedStatements
单个连接拥有的最大缓存数 maxOpenPreparedStatements maxStatementsPerConnection maxOpenPreparedStatements
  连接有效性检测设置:连接池内部有机制判断,如果当前的总连接数少于minildle,则会建立新的空闲连接,以保证连接数达到minildle。如果当前连接池中某个连接处于空闲,则被物理性的关闭掉。有些数据库连接的时候有超时的限制(mysql连接8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效,这时候,设置一个testWhileldle参数为true,可以保证连接池中,定时检测连接可用性,不可用的连接会被抛出或者重建,保证池中connection可用。
连接有效性检测设置   DBCP c3p0 Druid
申请连接检测 testOnBorrow testConnectionOnCheckin testOnBorrow
是否超时检测 testWhileldle   testWhileldle
空闲时间 timeBetweenEvictionRuns Millis idleConnectionTestPeriod timeBetweenEvictionRunsMillis
校验sql语句 validationQuery preferredTestQuery validationQuery
归还连接检测 testOnReturn testConnectionOnCheckout testOnReturn
  超时连接关闭设置:用来检测当前使用的连接是否发生泄漏,所以在代码内部就假定如果一个连接建立连接时间很长,则认定为泄漏,继而强制关闭。
超时连接关闭设置   DBCP c3p0 Druid
是否超时关闭连接 removeAbandoned breakAfterAcquireFailure removeAbandoned
超时时间 removeAbandonedTimeout checkoutTimeout removeAbandonedTimeout
是否记录日志 logAbandoned   logAbandoned