druid的关键参数+数据库连接池运行原理

minEvictableIdleTimeMillis :连接保持空闲而不被驱逐的最长存活时间。(默认30分钟)
  Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接。

testWhileIdle(默认false)  :建议配置为true,不影响性能,并且保证安全性。
  申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

timeBetweenEvictionRunsMillis     有两个含义:(原文:https://blog.csdn.net/yunnysunny/article/details/8657095 )
  1) Destroy线程会检测连接的间隔时间
  2) testWhileIdle里的判断依据。

 

 连接池运行原理:

1)数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接;  如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放掉某一个连接,  如果这个等待时间超过了maxWait,则会报错;  如果当前正在使用的连接数没有达到maxActive,则判断当前是否空闲连接,如果有则直接使用空闲连接,如果没有则新建立一个连接。  在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他操作复用。 

2)同时连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。  如果当前连接池中某个连接在空闲了timeBetweenEvictionRunsMillis时间后仍然没有使用,则被物理性的关闭掉。  有些数据库连接的时候有超时限制(mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,  这时候设置一个testWhileIdle参数为true,可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,  最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。

原文地址:https://www.cnblogs.com/hongchengshise/p/10518299.html

时间: 2024-10-14 15:34:30

druid的关键参数+数据库连接池运行原理的相关文章

java数据库连接池实现原理

一.为什么在连接数据库时要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.  一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下. 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个"池"里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请.使用和释放.对于多于连接池中连接数的并发请求,应该在请求队列

简单介绍一下线程池和数据库连接池的原理

当客户端请求的数据量比较大的时候,使用线程池可以节约大量的系统资源,使得更多的CPU时间和内存可以高效地利用起来.而数据库连接池的使用则将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量.使用情况等.本文我们主要就介绍一下线程池和数据库连接池的原理,接下来我们一起来了解一下这一部分内容. 线程池的原理: 其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某

数据库连接池的原理

这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. 一.早期我们怎么进行数据库操作        1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序: ②通过jdbc建立数据库连接: ③访问数据库,执行sql语句: ④断开数据库连接.        2.代码  // 查询所有用户 [java] view plain copy print? Public void FindAllUsers(){ //1.装载s

理解数据库连接池底层原理之手写实现

第一,数据库连接池中存放的就是数据库操作管道,不仅仅是存放,而且应该是管理这些管道: 第二,应该提供外部配置文件去初始化数据库连接池: 第三,如果一个数据库操作管道已经被占用,那么其他请求是否应该得到这个管道,也就是说我们要考虑多线程并发下,管道的分配问题: 第四,如果做到管道的复用?放回池子中,标示可用,并不是真正的关闭管道: IMyPool是一个接口,对外提供数据库连接池的基本服务,比如得到一个数据库操作管道. MyDefaultPool是IMyPool的实现. MyPooledConnec

数据库连接池原理

——连接池用什么数据结构实现? —— 实现连接池的代码 —— 线程安全问题 [数据库连接池的设计思路及java实现][ http://blog.csdn.net/shijinupc/article/details/7836129] [Java的JDBC数据库连接池实现方法][ http://developer.51cto.com/art/200907/137300.htm ]   ?   [设计数据库连接池,要考虑哪些问题?] 1. 有一个简单的函数从连接池中得到一个 Connection. 2

DBCP数据库连接池原理分析

在比较大的项目中,需要不断的从数据库中获取数据,Java中则使用JDBC连接数据库,但是获取数据库的连接可是相当耗时的操作,每次连接数据库都获得 .销毁数据库连接,将是很大的一个开销.为了解决这种开销,则使用了对象池的技术.程序启动时,先创建一定数量的数据库连接对象,然后只要一用到就直接从对象池中取出连接对象,然后使用完成后不对其销毁,而是再返回到对象池中,这样使连接池对象能反复使用,虽然增加了启动时所需要的时间但是提高了响应速度,对象池也相当于是一个缓存. 这里有DBCP的一些配置参数,通过这

Mybatis深入之数据库连接池原理

Mybatis深入之数据库连接池原理 简介 主要记录Mybatis数据库连接池实现原理.如何使用连接池来管理数据库连接的.连接池如何向外提供数据库连接.当外部调用使用完成之后是如何将数据库连接放回数据库连接池的. 准备 有前面的相关文章的铺垫.这里就不再从Mybatis数据库相关信息的初始化以及何时创建一个真正的数据库连接并且向外提供使用的.这两方面的过程可以参见Mybatis深入之DataSource实例化过程和Mybatis深入之获取数据库连接两篇文章. 了解Mybatis数据库连接池如何配

第13章—数据库连接池(Druid)

spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxiaohang/springboot Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容数据库,包括了Oracle.MySQL.PostgreSQL.SQL Server.H2等. Druid在监控.可扩展性.稳定性和性能方面具有明显的优势.通过Druid提供

spark 大型项目实战(七):用户访问session分析(七) --数据库连接池原理

**文章地址:http://www.haha174.top/article/details/257789** 1.谈谈数据库连接池的原理 ------------- 这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. 一.早期我们怎么进行数据库操作 1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序: ②通过jdbc建立数据库连接: ③访问数据库,执行sql语句: ④断开数据库连接. 2.代码 Public