数据库连接池基础
没有连接池的数据库连接方式指通过 DriverManager 和基本实现 DataSource 进行连接,但它相关
连接的建立以及关闭是非常耗时的.
如果使用连接池,将有池来管理相关的数据库连接,减少对数据库连接操作.
连接池所做的操作,除了管理连接,还有就是对数据库 jdbc api 的封装,但 jdbc api
才是根本
,
外面做的都是包装,再花哨都是假的。
c3p0 统一概念
checkout :从池中取得可用的连接
checkoutconnection:被使用的连接
checkin:把连接放回池中
checkinconnection:没有被使用的连接
所有超时设置,相关的连接,是物理连接的关闭,而不是连接返回池中
管理的是
pooledconnection
,而不是物理的
connection
pooledconnection 是 sun 针对连接池的接口,它本身包含 connection,和这个 connection 相关的
所有 statement,result,一个 checkout 的 connection 所作的所有数据库操作,都被
pooledconnection 所管理.
statement 缓存,主要针对 PreparedStatement 和 CallableStatement,statment 缓存主要相对一
个 connection 来说的,不同 connection 的 statment 不能通用.
c3p0 行为
生成一个 connnection
1. 当池中 connection 没有到达最大数,当有请求出现,将会产生 connection.
2. 成生一个 pooledconnection
3. 通过 pooledconnection.getConnection()得到连接(得到连接是 newProxyConnection,不是物
理连接)
checkin connection
1. 与 pooledconnection 脱离关系
2. 关闭与这个 connection 相关的 resultset
3. 关闭所有没有缓冲的 statement.
4. checkin 所有缓存的 statement.
5. 修改 pooledconnection 相关信息
checkout connection
1. 查看池中是否有没有使用的 connection,有就返回
2. 没有,如果没有达到最大数,就生成一个,或者就等待
c3p0 常用配置属性
automaticTestTable