jdbc深入~连接池

时间:2022-09-19 23:05:28

jdbc连接数据有点直来直取感觉,一般在大型的web应用里面(淘宝,天猫啥的),如果用这种直来直去的,那得创建多少个数据库连接啊,很显然是不可能的

web应用每一次的数据操作都要建立一个连接,系统分配一次内存资源,既然涉及内存资源,就应该知道是有限宝贵的,有的人说,我有做数据连接关闭啊,这里就要说到关键点了。你可以这样去测试一下问题,你不做关闭,然后去循环创建数据库连接,你就会发现了,像mysql这,你再用可视化工具打开,你还会发现数据繁忙不让打开,

大型网站在线用户都有上千了吧,同时间操作的话,你数据量大查询速度慢,来不及关闭呢,再操作,数据库繁忙爆掉了,后面人花钱买了东西,你这边没有数据,你不得被人打上门去么?

频繁的进行数据库连接操作势必占用很多的系统资源,而数据库开放给你的连接有限,肯定会影响到你网站的速度,这样的服务器不崩溃都不正常


连接池技术

     一次性创建可接受范围内的数据库连接,需要就获取,不需要就放回

dbcp,c3p0, Proxool, BoneCP , Druid 等等

连接池原理:

编写实现DataSource 接口类,

                     以构造器创建多个数据库的连接(以8个位列,别问这么多,幸运数字),

                     全部放到LinkedList<Connection> linkedList= new LinkedList<Connection>();

linkedList.add(你的数据库连接对象);

8-1*n(总数是8,每次减1,n总共次数),也就是每次用时从linkedList里面移除一个linkedList.removeFirst();

总共是8次,总不可能操作8次数据库之后就没了吧,jdbc也是有创建,操作完就有关闭的吧,这里关闭的时候你又要添加回来

(连接池这里不做实际的关闭,统称为释放)linkedList.add(你的数据库连接对象)重新放入linkedList,这样始终维持着8个数据库连接

当然(当并发增加是,连接池会不断的自动创建新的连接满足调用,直到达到连接池的最大数目;当连接池连接减少甚至没有时,连接池自动关闭一些连接,保持最小数目,这里就不考虑了

这是我对数据库连接池的理解