10.13JDBC之数据库连接池
传统的基于数据库的Web程序模式
-
主程序(
Servlet,bean)中建立数据库连接 -
进行
sql操作 -
断开数据库连接
存在的问题
-
普通的JDBC数据库使用
DriverManager获取,每次向数据库建立连接的时候都要将Connection加载到内存中,在验证用户名和密码,通过了以后执行操作,执行完毕在断开连接 -
消耗大量的资源和时间,数据库的连接资源没有得到很好的重复利用
-
每一次数据库连接,使用完以后都得断开连接,如果程序出现异常未能关闭,导致数据库系统中的内存泄露,最终将导致数据库重启连接
-
不能控制被创建的连接对象数,连接过多会导致内存泄露,服务器崩溃。
Java的内存泄露是指内存中存在对象不能被回收
C的内存泄露是指指向内存区域的指针丢了
接触到的池:
-
字符串常量池
-
线程池
-
数据库连接池
数据库连接池技术
数据库连接池的基本思想:
为数据库连接建立一个"缓冲池",与现在缓存池当中存放一定数量的连接。需要建立连接时先从"缓冲池"取一个出来,用完再放回去。
数据库连接池的作用:
-
分配、管理、释放数据库连接。
-
允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
数据库连接池的特点:
-
初始化时创建一定数量的数据库连接,这些连接的数量由最小数据库连接数确定。最大数据库连接数量限定了这个连接池能占有的最大连接数。
-
当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中
数据库连接池原理

-
开始预设几个数据库连接线程。线程状态为
free -
每有一个线程进行占用链接状态就会由
free变成busy -
使用完成以后调用方法
Connection.close()将连接状态由busy又变为free--->归还的时候修改事务提交的状态为自动提交 -
超过连接池数量的线程访问数据库连接,进行等待
多种开源的数据库连接池
特点:
-
JDBC的数据库连接池用
javax.sql.DataSource表示,DataSource只是一个接口 -
DataSource接口由服务器(`Weblogic, WebSpher,Tomcat)和一些开源组织提供实现:-
DBCP:Apache提供的数据库连接池,
Tomcat服务器自带dbcp数据库连接池,速度相对c3p0较快,但自身存在Bug,Hibernate3已经不再提供支持。--->主要讲 -
C3P0:一个开源组织提供的数据库连接池,速度相对较慢,稳定性可以。
Hibernate官方推荐使用--->主要讲 -
Proxool:
Sourceforge下的一个开源项目,能监控连接池状态,稳定性比C3P0差一些 -
BoneCP:开源组织提供,速度快
-
Druid:阿里提供的数据库连接池,速度不确定是否有
BoneCP快--->主要讲
-
-
DataSource通常被称为数据源,包含连接池和连接池管理。习惯上把DataSource称为连接池 -
DataSource用来取代DriverManager来获取Connection

浙公网安备 33010602011771号