凯哥学堂

搜索

凯哥学堂

JavaEE——数据连接池

2018-10-26 18:26| 发布者: 可可| 查看: 1| 评论: 0

凯哥学堂 首页 资讯 学习笔记 JavaEE 查看内容

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

数据连接池

数据库连接采用tcp安全连接,造成一个问题连接耗时,每当有客户请求,我们即时开辟连接对象速度慢,优化方法是什么?

提前准备一些已经连接好的数据库连接对象,放入容器中。我们需要的时候去取来用,就不用每次去创建了。当使用完毕了,在放回池子,像线程池一样循环利用并节省时间资源。

在Java中有一个接口DataSource数据源,其实现类,池的实现类都实现与这个接口。

第一个数据库连接池dbcp:

image

第二个数据库连接池c3p0:

image

第三个数据库连接池druid:

image

数据库连接池,提前准备连接对象,3种连接池对象讲述一个即可c3p0:

image

C3p0连接池对象在mchang.v2.c3p0包下,上图中对象是数据源的实现类

3个步骤:
告诉连接池实现类,我的驱动在哪里。可以是其他数据库驱动
告诉连接数据库的必要条件,如URL用户名密码
对连接池的设置,比如池中最大生存多少个对象,最少生存多少个对象

从池中获得对象,去getConnection

池中最大最小生存连接对象有什么用呢?

设置池中最大生存连接对象,那么池中只会产生这么多个对象,可以规定创建个数。当getConnection来获得连接对象,比如我这里设置最大3个连接对象,当别人获得了3个对象走了。第四个人再来获得就会阻塞等待别人将对象放回池中我在使用。规定数量限制创建个数,超出个数的来获得只能先等待着空闲才行

设置池中最小的连接对象有什么用意呢?设置最大是限制池中最多生产多少对象出来,设置最小的目的是:当池中闲置下来了,对象都闲下来了没人在要了,闲在池中的对象我可以回收掉避免占着浪费。回收是可以回收但你可以指定我最少保留多少个。也就是比如有10个对象闲置,设置最小存活3个,那么剩下7个闲置都回收,池中保留3个

这就是最大最小的生存数量目的,最大的数量设置池最多生产多少对象,多余的人就阻塞等待空闲。最小的数量,设置即使是池闲置,回收连接对象,最少保持多个人对象活着

查看阻塞:

image

设置数量最大3个,当获得一个连接对象,池中还有2个对象。

再获得一个还有1个连接对象。

Close关闭在连接池中并不是关闭连接对象,而是将对象放回池中表示用完了。还回去一个,但不是立刻就放回去了,要过一下,还暂时是一个

又去获得一个,池中没有对象了

在获得一个没有对象,则阻塞等待闲置对象出来,自己再去连接。这里是阻塞了,在main线程中一直等待来对象出来。也可以设置超时时间,超过时间还没有获得异常抛出

这就是连接池,准备好对象你们去取,取没有了就等,用完了就close,在池中并不是关闭连接而是将连接放回池等待下次使用

image

当这样时,只获得3次,则刚好满足池中数量,则正常结束

Dbcp连接池:

image

Druid连接池:

image

都是一个目的,准备连接对象,要用的时候去取。都配置驱动,与连接参数,还可以配置自身连接池的设置,最大最小个数及阻塞超时时间


关注我们


微信

微博

QQ