JavaEE——数据连接池
Posted 凯哥学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaEE——数据连接池相关的知识,希望对你有一定的参考价值。
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
数据连接池
数据库连接采用tcp安全连接,造成一个问题连接耗时,每当有客户请求,我们即时开辟连接对象速度慢,优化方法是什么?
提前准备一些已经连接好的数据库连接对象,放入容器中。我们需要的时候去取来用,就不用每次去创建了。当使用完毕了,在放回池子,像线程池一样循环利用并节省时间资源。
在Java中有一个接口DataSource数据源,其实现类,池的实现类都实现与这个接口。
第一个数据库连接池dbcp:
第二个数据库连接池c3p0:
第三个数据库连接池druid:
数据库连接池,提前准备连接对象,3种连接池对象讲述一个即可c3p0:
C3p0连接池对象在mchang.v2.c3p0包下,上图中对象是数据源的实现类
3个步骤:
告诉连接池实现类,我的驱动在哪里。可以是其他数据库驱动
告诉连接数据库的必要条件,如URL用户名密码
对连接池的设置,比如池中最大生存多少个对象,最少生存多少个对象
从池中获得对象,去getConnection
池中最大最小生存连接对象有什么用呢?
设置池中最大生存连接对象,那么池中只会产生这么多个对象,可以规定创建个数。当getConnection来获得连接对象,比如我这里设置最大3个连接对象,当别人获得了3个对象走了。第四个人再来获得就会阻塞等待别人将对象放回池中我在使用。规定数量限制创建个数,超出个数的来获得只能先等待着空闲才行
设置池中最小的连接对象有什么用意呢?设置最大是限制池中最多生产多少对象出来,设置最小的目的是:当池中闲置下来了,对象都闲下来了没人在要了,闲在池中的对象我可以回收掉避免占着浪费。回收是可以回收但你可以指定我最少保留多少个。也就是比如有10个对象闲置,设置最小存活3个,那么剩下7个闲置都回收,池中保留3个
这就是最大最小的生存数量目的,最大的数量设置池最多生产多少对象,多余的人就阻塞等待空闲。最小的数量,设置即使是池闲置,回收连接对象,最少保持多个人对象活着
查看阻塞:
设置数量最大3个,当获得一个连接对象,池中还有2个对象。
再获得一个还有1个连接对象。
Close关闭在连接池中并不是关闭连接对象,而是将对象放回池中表示用完了。还回去一个,但不是立刻就放回去了,要过一下,还暂时是一个
又去获得一个,池中没有对象了
在获得一个没有对象,则阻塞等待闲置对象出来,自己再去连接。这里是阻塞了,在main线程中一直等待来对象出来。也可以设置超时时间,超过时间还没有获得异常抛出
这就是连接池,准备好对象你们去取,取没有了就等,用完了就close,在池中并不是关闭连接而是将连接放回池等待下次使用
当这样时,只获得3次,则刚好满足池中数量,则正常结束
Dbcp连接池:
Druid连接池:
都是一个目的,准备连接对象,要用的时候去取。都配置驱动,与连接参数,还可以配置自身连接池的设置,最大最小个数及阻塞超时时间
以上是关于JavaEE——数据连接池的主要内容,如果未能解决你的问题,请参考以下文章