- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c3p0连接池探索
C3P0 初探
王洋
2012-08-15
目录
C3P0简介
相关概念
C3P0的特点
源码分析
使用与设置
各连接池的比较
性能测试
C3P0简介
JAVA开源的连接与Statement池
JDBC3 支持,JDBC2的可选扩展
能增强JDBC drivers的功能
应用广泛,和Hibernate一
起发布
使用要求
level 1.3.x or above Java Runtime
EnvironmentJDBC 2.x or above javax.sql
Libraries Java 1.4.x and 1.5.x
C3P0与JDBC的相关概念
Connection:是指JDBC规范中的Connection,与接口java.sql.Connection相对应。与特定数据库的连接(会话)。在连接上下文中执行?SQL?语句并返回结果,一个Connection代表一个物理数据库连接。
PhysicalConnection:物理连接,真正完成数据库与应用之间的连接建立和维护,并解析语义,返回相应,一般由各个厂家在驱动程序中提供。例如:Oracle的为oracle.jdbc.driver.PhysicalConnection。
PooledConnection:是与JDBC规范中javax.sql.PooledConnection相对应,为连接池管理提供钩子?(hook)?的对象。PooledConnection?对象表示到数据源的物理连接。该连接在应用程序使用完后可以回收而不用关闭,从而减少了需要建立连接的次数。
ConnectionProxy:连接代理,一般由数据库连接池提供,完成对物理连接的包装,通过代理连接将一些操作交给物理连接去完成,一些操作自己完成,例如:close方法,一般物理连接的close方法是指物理上彻底关闭连接,而Proxy的一般实现是将该ConnectionProxy标记为闲置状态,并将其放回到连接池中,一般下次可用。
Pool:连接池的核心实现者,主要完成ConnectionProxy的存储,以及连接的获取、释放、创建、物理销毁、连接可用性探测、性能监控。连接池的核心,直接影响到连接池的高可用性、高并发、高性能等特性。
PooledDataSource:连接池对DataSource的一种实现,意在从Pool中获取连接,达到连接的可重用性。
checkout?:?从池中取得可用的连接
checkin?:把连接放回池中
checkoutconnection?:?被使用的连接
checkinconnection?:?没有被使用的连接
通过连接池获取连接
C3P0特点
每个用户都提供独立的连接和statement池
连接池设置参数maxPoolSize是针对一个用户的,通过(user, password)对来区分
能支持Connection和Statemen的非标准方法
设置的存放位置
Java properties file ?perties?
XML configuration file c3p0-config.xml?默认的配置文件
System properties
连接池默认从不超时,但两个参数可以设置超时
maxConnectionAge 被数据库使用的时间
maxIdleTime 在连接池中空闲的时间
C3P0特点(2/4)
提供连接测试
连接失效的原因 资源泄漏,驱动(JDBC drivers )bug,网络问题等
默认是没有测试
设置statement池
有时会提高性能,有时会损害性能
针对不同的数据库
如果使用,要进行测试,以确定相关参数
管理连接
提供了hook接口,能修改连接,跟踪连接
时机:
从数据库中取出连接时
返回给客户端之前
返回给连接池之前
在连接被连接池析构之前
C3P0特点(3/4)
错误恢复
DB错误包括:DB重新启动,网络连接中断等
设置重试
设置重试次数 设置重试间隔
如果重试的尝试都失败了,如果再有数据库连接请求,有两个处理策略:
1 重新连接
2 不再尝试,直接返回fail
应对DB重启
设置 maxIdleTime 或 maxConnectionAge 来加速连接池替换失效连接
设置连接测试
C3P0特点(4/4)
Debug 及避开有问题的应用程序
c3p0 可以帮助用户来debug
提供check in和check out不对应时的记录信息
设置unreturnedConnectionTimeout
日志设置
类似与jakarta commons-logging ,提供实时的日志记录
helper线程
每个 DataSource 有3个helper线程,在系统重载或一直有挂起的任务时应增加helper线程的数量
JDBC中慢的操作是he
文档评论(0)