一种获取数据库连接的方法和装置制造方法及图纸

技术编号:20242272 阅读:37 留言:0更新日期:2019-01-29 23:19
本发明专利技术提供了一种获取数据库连接的方法和装置,将设定数量的数据库连接存储于数据库连接池,为构建的每一个线程创建对应的ThreadLocal对象;当线程接收到服务请求时,检测线程对应的ThreadLocal对象中是否存储有数据库连接,如果是,则获取ThreadLocal对象中存储的数据库连接;否则,将数据库连接池中存储的一个数据库连接转存到ThreadLocal对象;当监测到线程结束服务时,将线程对应的ThreadLocal对象存储的数据库连接,返回给数据库连接池,并释放ThreadLocal对象。本发明专利技术提供的方案避免了多个处理线程获取相同的数据库连接,从而降低了数据库中数据混乱的风险。

【技术实现步骤摘要】
一种获取数据库连接的方法和装置
本专利技术涉及计算机
,特别涉及一种获取数据库连接的方法和装置。
技术介绍
对于javaweb应用来说,在通过客户端或者终端浏览器发起访问请求时,服务端的容器(tomcat)解析接收到的访问请求,并将解析出的访问请求发送给对应的连接器/连接接口(servlet),即服务器为访问请求创建出处理线程,处理线程通过获取数据库连接,以对数据库中的数据进行增、删、改、查等操作。目前获取数据库连接的方式主要包括两种,第一种是当处理线程创建后,现为处理线程创建数据库连接,第二种是将一定数量的数据库连接存储在数据库连接池中,处理线程直接从连接池获取数据库连接即可。当有大量的访问请求时,即当有大量的处理线程要获取数据连接时,第一种方法会出现频繁的创建和销毁数据库连接,造成数据库堵塞以及数据库出现性能瓶颈的问题。第二种方法虽然解决了数据库堵塞以及数据库出现性能瓶颈的问题,但是,多个相同功能的处理线程,可能会从数据库连接池中取到相同的数据库连接,对数据库中的数据进行增、删、改、查等操作,导致数据库中的数据混乱。
技术实现思路
本专利技术实施例提供了一种获取数据库连接的方法本文档来自技高网...

【技术保护点】
1.一种获取数据库连接的方法,其特征在于,将设定数量的数据库连接存储于数据库连接池,还包括:当监测到至少一个线程构建时,为构建的每一个所述线程创建对应的ThreadLocal对象;当所述线程接收到外部web应用发送的服务请求时,检测所述线程对应的ThreadLocal对象中是否存储有数据库连接,如果是,则直接获取所述ThreadLocal对象中存储的所述数据库连接;否则,将所述数据库连接池中存储的一个数据库连接转存到所述ThreadLocal对象;当监测到所述线程结束服务时,将所述线程对应的所述ThreadLocal对象存储的所述数据库连接,返回给所述数据库连接池,并释放所述ThreadLoc...

【技术特征摘要】
1.一种获取数据库连接的方法,其特征在于,将设定数量的数据库连接存储于数据库连接池,还包括:当监测到至少一个线程构建时,为构建的每一个所述线程创建对应的ThreadLocal对象;当所述线程接收到外部web应用发送的服务请求时,检测所述线程对应的ThreadLocal对象中是否存储有数据库连接,如果是,则直接获取所述ThreadLocal对象中存储的所述数据库连接;否则,将所述数据库连接池中存储的一个数据库连接转存到所述ThreadLocal对象;当监测到所述线程结束服务时,将所述线程对应的所述ThreadLocal对象存储的所述数据库连接,返回给所述数据库连接池,并释放所述ThreadLocal对象。2.根据权利要求1所述的方法,其特征在于,进一步包括:为所述数据库连接池构建一个排队队列;在检测到所述线程对应的ThreadLocal对象中没有数据库连接之后,在将所述数据库连接池中存储的一个数据库连接转存到所述ThreadLocal对象之前,进一步包括:所述ThreadLocal对象进入所述排队队列;所述将所述数据库连接池中存储的一个数据库连接转存到所述ThreadLocal对象,包括:当所述排队队列中包含有至少两个ThreadLocal对象时,按照至少两个所述ThreadLocal对象进入所述排队队列的时间顺序,将所述数据库连接池中一个未被占用的数据库连接转存到所述ThreadLocal对象。3.根据权利要求2所述的方法,其特征在于,在所述ThreadLocal对象进入所述排队队列之后,在所述将所述数据库连接池中一个未被占用的数据库连接转存到所述ThreadLocal对象之前,进一步包括:当一个目标ThreadLocal对象在所述排队队列中的排队时长达到排队时长阈值时,按照所述目标ThreadLocal对象在所述排队队列中的位置,计算增补数量;根据所述增补数量,为所述数据库连接池增补数据库连接;对所述排队队列中各个ThreadLocal对象的排队时长重新计时。4.根据权利要求3所述的方法,其特征在于,所述按照所述目标ThreadLocal对象在所述排队队列中的位置,计算增补数量,包括:当数据库连接的当前总个数等于预设的所述数据库连接池的最大连接数时,增补数量为0;当数据库连接的当前总个数小于预设的所述数据库连接池的最大连接数时,根据下述计算公式组,计算增补数量;其中,z表征增补数量,K表征预设的所述数据库连接池的最大连接数;v表征数据库连接的当前总个数;x表征所述排队队列中位于所述目标ThreadLocal对象之前的ThreadLocal对象的个数;y表征所述排队队列中位于所述目标ThreadLocal对象之后的ThreadLocal对象的个数;α表征用户设定的不小于0且不大于1的常数。5.根据权利要求1至4任一所述的方法,其特征在于,进一步包括:针对预设的至少两个统计周期中的每一个统计周期,执行:统计所述数据库连接池中剩余的数据库连接个数的最小值;利用统计出的每一个所述统计周期中所述数据库连接池中剩余的数据库连接个数的最小值,更新所述设定数量;当更新后的设定数量大于数据库连接的当前总个数时,为所述数据库连接池构建并存储(m-v)个新的数据库连接;当更新后的设定数量小于数据库连接的当前总个数时,为所述数据库连接池释放(v-m)个数据库连接,其中,m表征更新后的设定数量,v表征数据库连接的当前总个数。6.根据权利要求5所述的方法,其特征在于,所述利用统计出的每一个所述统计周期中所述数据库连接池中剩余的数据库连接个数的最小值,更新所述设定数量,包括:利用下述设定数量计算公式组,计算新的设定数量,并利用计算出的新的设定数量更新原来的设定数量;其中,k表征预设的所述数据库连接池的最小空闲连接数;T表征统计周期总个数;v表征数据库连接的当前总个数;si表征统计出的统计周期i中所述数据库连接池中剩余的数据库连接个数的最小值,i取值为1至T的正整数;K表征预设的所述数据库连接池的最大连接数;...

【专利技术属性】
技术研发人员:康添
申请(专利权)人:四川虹美智能科技有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1