druid连接池配置详解(s**框架中怎么配置数据库连接池)
本文目录
- s**框架中怎么配置数据库连接池
- Druid配置参数详解-testOnReturn
- Druid连接池源码解析(2)DruidDataSource-2
- 如何给myeclipse的maven配置druid
- druid 连接数据库超时怎么配置
- Druid连接池原理
s**框架中怎么配置数据库连接池
Druid配置
***隐藏网址***
2.编写数据库连接的资源文件:dbconfig.properties
url:jdbc:mysql://localhost:3306/flm?useUnicode=true&characterEncoding=utf8
driverClassName:com.mysql.jdbc.Driver
username:root
password:root
#------------------------------------------------------------------------------------------
#配置扩展插件 监控统计用filters:stat 日志用filters:log4j 防御sql注入用filters:wall
filters:stat
#最大连接池数量 初始化建立物理连接的个数 获取连接时最长的等待时间 最小连接池数量 maxIdle已经弃用
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
maxIdle:15
#有两个含义 1.Destroy 线程会检测连接的时间 2.testWhileIdle的判断依据
timeBetweenEvictionRunsMillis:60000
#Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接
minEvictableIdleTimeMillis:300000
#用来检测连接是否的sql,要求是一个查询语句。在mysql中通常设置为SELECT ’X’
validationQuery:SELECT ’x’
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery连接是否有效
testWhileIdle:true
#申请连接时执行validationQuery检测连接是否有效 这个配置会降低性能
testOnBorrow:false
#归还连接时执行validationQuery检测连接是否有效 这个配置会降低性能
testOnReturn:false
#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
maxOpenPreparedStatements:20
#对于建立连接超过removeAbandonedTimeout的连接强制关闭
removeAbandoned:true
#指定连接建立多长就被强制关闭
removeAbandonedTimeout:1800
#指定发生removeabandoned时,是否记录当前线程的堆栈信息到日志中
logAbandoned:true
1234567891011121314151617181920212223242526272829303132333435363738394041424344454612345678910111213141516171819202122232425262728293031323334353637383940414243444546
3.在Spring配置文件ApplicationContext.xml中加载资源文件进来
《!--PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文(配置文 件)中的属性值放在另一个单独的标准java Properties文件中去。--》
《bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"》
《property name="locati***"》
《list》
《value》/WEB-INF/classes/dbconfig.properties《/value》 《!--dbconfig.properties 数据库连接信息--》
《/list》
《/property》
《/bean》 1234567812345678
4.在Spring配置文件ApplicationContext.xml中配置阿里数据连接池Druid
《!-- 阿里 druid数据库连接池 --》
《bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"》
《!-- 数据库基本信息配置 --》
《property name="url" value="${url}" /》
《property name="username" value="${username}" /》
《property name="password" value="${password}" /》
《property name="driverClassName" value="${driverClassName}" /》
《property name="filters" value="${filters}" /》
《!-- 最大并发连接数 --》
《property name="maxActive" value="${maxActive}" /》
《!-- 初始化连接数量 --》
《property name="initialSize" value="${initialSize}" /》
《!-- 配置获取连接等待超时的时间 --》
《property name="maxWait" value="${maxWait}" /》
《!-- 最小空闲连接数 --》
《property name="minIdle" value="${minIdle}" /》
《!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --》
《property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /》
《!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --》
《property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" /》
《property name="validationQuery" value="${validationQuery}" /》
《property name="testWhileIdle" value="${testWhileIdle}" /》
《property name="testOnBorrow" value="${testOnBorrow}" /》
《property name="testOnReturn" value="${testOnReturn}" /》
《property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" /》
《!-- 打开removeAbandoned功能 --》
《property name="removeAbandoned" value="${removeAbandoned}" /》
《!-- 1800秒,也就是30分钟 --》
《property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" /》
《!-- 关闭abanded连接时输出错误日志 --》
《property name="logAbandoned" value="${logAbandoned}" /》
《/bean》123456789101112131415161718192021222324252627282930313233123456789101112131415161718192021222324252627282930313233
Druid配置参数详解-testOnReturn
画外音:目前Druid在开源中国举办的2019年度最受欢迎中国开源软件中排名第7名,支持Druid的朋友可以去投票哇。 2019年度最受欢迎中国开源软件
testOnReturn :如果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用。
当连接使用完,调用commit或者rollback方法后,连接池会回收该连接,该参数主要在DruidDataSource的recycle方法中用到
判断连接是否可用同testOnBorrow
Druid配置参数详解-testOnBorrow
Druid连接池源码解析(2)DruidDataSource-2
关闭时调用close()方法,主要流程:
在DruidDataSource中单独定义了一个StackTrace,就是在初始化的时候获取了当前线程的StackTrace,目测目的是为了自定义输出调试信息
重启时调用restart()方法,主要流程:
加锁-》判断活跃连结数是否为0-》 调用close() -》调用resetStat()
resetStat()重置配置到默认值,设置各个原子计数器为0
如果有配置变动,调用configFromPropety()重新配置各属性
此时重启便结束了,下一次调用getConnection()的时候,会调用init()重新初始化
关于几个原子计数器,由于Druid说是为监控而生的连接池,默认是基于内存计数的,所以restart里清空的几个计数器,根据名字就能比较明显地知道是统计各种情况发生的次数的,如:链接错误数,事务提交、回滚数等等
那么之前init中的几个计数器,是做什么的么?
connectionIdSeedUpdater 追了下,主要是生成连接id的,对应到holder中的connectionId,
在DataSource中的getPoolingConnectionInfo(),放到了一个map里,缓存了连接信息
在DruidStatManagerFacade和DruidStatService 中获取了map中的连接信息,供监控控制台使用
dataSource的id本身是自增的,留出来的步长是生成connectionid等根据id的前缀判断属于哪个datasource
使用AtomicLongFieldUpdater的好处是:
因为当需要进行原子限定的属性所属的类会被创建大量的实例对象,如果用AtomicLong每个实例里面都要创建AtomicLong对象,从而多出内存消耗,使用AtomicLongFieldUpdater仅需要在抽象的父类中声明一个静态的更新器,就可以在各个对象中使用了。
如何给myeclipse的maven配置druid
1、背景及环境
这几天在捣鼓Struts2+Spring3+Hibernate4+Maven+EasyUI的整合,JDK1.7,数据库采用Oracle 11g R2,驱动采用ojdbc14,数据库连接池采用阿里巴巴的druid(完整的包名为com.alibaba.druid.pool.DruidDataSource),但是在做用JUnit做单元测试的时候报如下错误:
Caused by: java.sql.**LException: not support oracle driver 1.0
2、网友问答
网上搜了很久,发现最初发表在开源中国上的一篇被转载多次的问答:
问:今天第一次使用druid,程序启动的时候报“druid –not support oracle driver 1.0”,换个各种版本驱动(包括ojdbc6),都不行。是因为连接的客户端的版本太低了吗?
答:温少说的对,是因为有多个驱动包造成的。在jre的ext目录下发现了class12.jar。
3、本文方法
我检查了下,发现我的问题并不是这个原因造成的,不过这篇文章给了我点启示,就是数据库驱动的版本问题,后来换用Oracle 11g自带的驱动ojdbc6.jar,问题得到解决。
4、本文相关链接
①druid介绍:阿里巴巴数据库连接池druid
②Maven下如何安装ojdbc6.jar:MyEclipse环境下如何采用Maven导入ojdbc14.jar和ojdbc6.jar
③Oracle数据库驱动版本变迁:Oracle数据库驱动历代版本及其区别(classes12,ojdbc14,ojdbc5,ojdbc6等)
//---------------------------------------------------------------------------------------------------------------------------------------------------------
***隐藏网址***
这几天在捣鼓Struts2+Spring3+Hibernate4+Maven+EasyUI的整合,采用Oracle数据库,Oracle数据库驱动采用ojdbc14,后来因为数据库连接池采用阿里巴巴的druid,其中可能存在版本问题而换成了ojdbc6。本文主要介绍MyEclipse环境下利用Maven导入ojdbc14.jar和ojdbc6.jar的方法。
1、ojdbc14.jar的导入方法:
《dependency》
《groupid》com.oracle《/groupid》
《artifactid》ojdbc14《/artifactid》
《version》10.2.0.4.0《/version》
《/dependency》
①与导入其它jar包相同,在项目pom.xml文件中,可以采用Dependencies向导搜索并导入代码,可以发现其Group Id为com.oracle,Artifact Id为ojdbc14,目前最新版本为:10.2.0.4.0,因此有如下代码:
***隐藏网址***
②下载ojdbc14包,并在命令行中执行如下语句:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=D:/extJar/ojdbc14.jar
执行完后,我们可以在目录C:\Users\Administrator\.m2\repository\com\oracle\ojdbc14\10.2.0.4.0下找到包ojdbc14-10.2.0.4.0.jar,刷新项目,成功。
注:1)若想执行上述语句,首先需要配置Java的环境变量和Maven的环境变量;2)请注意上述的版本号和ojdbc.jar路径;
2、ojdbc6.jar的导入方法:
唯一一点与ojdbc14.jar导入方法最大的不同是,当我们在MyEclipse下项目中的pom.xml的Dependencies向导搜索时,无法搜索到ojdbc6.jar这个包,这里我们可以按如下方式解决:
①直接在pom.xml中编写代码:
《dependency》
《groupid》com.oracle《/groupid》
《artifactid》ojdbc6《/artifactid》
《version》11.2.0.1.0《/version》
《/dependency》
②与ojdbc14的方法相同,执行:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar
完成。
druid 连接数据库超时怎么配置
Druid连接池及监控在Spring配置如下:
view plaincopy
《bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"》
《!-- 基本属性 url、user、password --》
《property name="url" value="${jdbc_url}" /》
《property name="username" value="${jdbc_user}" /》
《property name="password" value="${jdbc_password}" /》
《!-- 配置初始化大小、最小、最大 --》
《property name="initialSize" value="1" /》
《property name="minIdle" value="1" /》
《property name="maxActive" value="20" /》
《!-- 配置获取连接等待超时的时间 --》
《property name="maxWait" value="60000" /》
《!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --》
《property name="timeBetweenEvictionRunsMillis" value="60000" /》
《!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --》
《property name="minEvictableIdleTimeMillis" value="300000" /》
《property name="validationQuery" value="SELECT ’x’" /》
《property name="testWhileIdle" value="true" /》
《property name="testOnBorrow" value="false" /》
《property name="testOnReturn" value="false" /》
《!-- 打开PSCache,并且指定每个连接上PSCache的大小 --》
《property name="poolPreparedStatements" value="true" /》
《property name="maxPoolPreparedStatementPerConnectionSize" value="20" /》
《!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --》
《property name="filters" value="stat" /》
《/bean》
2. 只要配置initialSize,maxActive就可以,目前这样的配置已经能够使用连接池,加入其实配置性能不好,官方文档里也不没加其它属性,连接池jar包免费下载。
Druid连接池原理
***隐藏网址***
druid关闭监控页面:
spring.datasource.druid.filter.config.enabled=false
spring.datasource.druid.web-stat-filter.enabled=false
spring.datasource.druid.stat-view-servlet.enabled=false
根据图上的步骤,详细说下
(1)调用DruidDataSourceFactory.createDataSource(properties)方法,初始化DruidDataSource对象;只是初始化了对象,并没有创建连接;properties参数指的druid.properties配置文件
(2)调用DruidDataSource.getConnection()方法,获取连接;maxWait配置文件设置的超时时间
(3)init()方法创建连接池;inited初始化连接标志位为false,首次获取连接时先初始化initialSize配置数量的连接数,线程池异步创建连接(socket通道);submitCreateTask(true)方法提交创建连接任务
(4)调用DruidDataSource.pollLast(long nanos)方法,参数超时纳秒,获取连接池数组尾部连接;如果连接池为0时,emptySignal()方**提交创建连接的任务,如果存活的连接超过最大连接数,会创建失败,在未超时情况下,会循环做此操作,当有连接调用close()方法关闭后,会将连接再设置到连接池数组中,此时再拿连接池尾部连接使用;否则超时返回null,上层做出抛异常处理
(5)Connection.close()关闭连接(实现方法DruidPooledConnection.close()),DruidDataSource.putLast()方法将连接重新设置到连接池数组的尾部
个人看源码理解,说下大致流程,有不足和不对地方可以指出