数据库阿里连接池druid配置详解

Posted 诗语七夜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库阿里连接池druid配置详解相关的知识,希望对你有一定的参考价值。


java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3pdhcpproxool等,druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。接下来就说一下druid的简单使用。

dbcp类似,druid的配置项如下:


配置

缺省值

说明

name


配置这个属性的意义在于,如果存在多个数据源,监控的时候 
 
可以通过名字来区分开来。如果没有配置,将会生成一个名字, 
 
格式是:"DataSource-"  + System.identityHashCode(this)

jdbcUrl


连接数据库的url,不同数据库不一样。例如: 
 mysql : jdbc:mysql://10.20.153.104:3306/druid2  
 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto

username


连接数据库的用户名

password


连接数据库的密码。如果你不希望密码直接写在配置文件中, 
 
可以使用ConfigFilter。详细看这里: 
 https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

driverClassName

根据url自动识别

这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName

initialSize

0

初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection

maxActive

8

最大连接池数量

maxIdle

8

已经不再使用,配置了也没效果

minIdle


最小连接池数量

maxWait


获取连接时最大等待时间,单位毫秒。配置了maxWait之后, 
 
缺省启用公平锁,并发效率会有所下降, 
 
如果需要可以通过配置useUnfairLock属性为true使用非公平锁。

poolPreparedStatements

false

是否缓存preparedStatement,也就是PSCache 
 PSCache
对支持游标的数据库性能提升巨大,比如说oracle 
 
mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
 
作者在5.5版本中使用PSCache,通过监控界面发现PSCache有缓存命中率记录, 
 
该应该是支持PSCache

maxOpenPreparedStatements

-1

要启用PSCache,必须配置大于0,当大于0时, 
 poolPreparedStatements
自动触发修改为true 
 
Druid中,不会存在OraclePSCache占用内存过多的问题, 
 
可以把这个数值配置大一些,比如说100

validationQuery


用来检测连接是否有效的sql,要求是一个查询语句。 
 
如果validationQuerynulltestOnBorrowtestOnReturn 
 testWhileIdle
都不会其作用。

testOnBorrow

true

申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

testOnReturn

false

归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能

testWhileIdle

false

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

timeBetweenEvictionRunsMillis


有两个含义: 
 1) Destroy
线程会检测连接的间隔时间 
 2) testWhileIdle
的判断依据,详细看testWhileIdle属性的说明

numTestsPerEvictionRun


不再使用,一个DruidDataSource只支持一个EvictionRun

minEvictableIdleTimeMillis



connectionInitSqls


物理连接初始化的时候执行的sql

exceptionSorter

根据dbType自动识别

当数据库抛出一些不可恢复的异常时,抛弃连接

filters


属性类型是字符串,通过别名的方式配置扩展插件, 
 常用的插件有: 
 
监控统计用的filter:stat  
 
日志用的filter:log4j 
 
防御sql注入的filter:wall

proxyFilters


类型是List<com.alibaba.druid.filter.Filter> 
 
如果同时配置了filtersproxyFilters 
 
是组合关系,并非替换关系

第一步:加入 druid-1.0.9.jar

第二步:ApplicationContext.xml配置如下

<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <property name="dataSource" ref="dataSource"></property>

</bean>

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  

    <property name="locations">  

        <list>  

            <value>/WEB-INF/classes/dbconfig.properties</value>  

        </list>

    </property>  

</bean>


第三步: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>


第四步:dbconfig.properties 配置如下

url:jdbc:sqlserver://localhost:1433;database=companyoa

driverClassName:com.microsoft.sqlserver.jdbc.SQLServerDriver

username:sa

password:123456

filters:stat 

maxActive:20 

initialSize:1 

maxWait:60000 

minIdle:10 

maxIdle:15 

timeBetweenEvictionRunsMillis:60000 

minEvictableIdleTimeMillis:300000

validationQuery:SELECT'x' 

testWhileIdle:true 

testOnBorrow:false 

testOnReturn:false 

maxOpenPreparedStatements:20 

removeAbandoned:true 

removeAbandonedTimeout:1800 

logAbandoned:true 


第五步:web.xml配置如下

<!-- 连接池启用 Web监控统计功能start--> 

<filter>

    <filter-name>DruidWebStatFilter</filter-name>

    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> 

    <init-param> 

        <param-name>exclusions</param-name> 

        <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value> 

    </init-param> 

</filter> 

<filter-mapping> 

    <filter-name>DruidWebStatFilter</filter-name> 

    <url-pattern>/*</url-pattern> 

</filter-mapping > 

<servlet> 

    <servlet-name>DruidStatView</servlet-name> 

    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> 

</servlet> 

<servlet-mapping> 

    <servlet-name>DruidStatView</servlet-name> 

    <url-pattern>/druid/*</url-pattern> 

</servlet-mapping> 

<!-- 连接池启用 Web监控统计功能end--> 


配置完成后,访问监控的页面url为域名+端口号+'/druid':http://127.0.0.1:8080/druid


数据库阿里连接池druid配置详解

数据库阿里连接池druid配置详解


数据库阿里连接池druid配置详解

可以监控SQL,session,url等,功能还算比较齐全。



数据库阿里连接池druid配置详解



数据库阿里连接池druid配置详解 以上来自一位暴走的女程序员

我这么可愛你忍心不点赞吗 数据库阿里连接池druid配置详解


以上是关于数据库阿里连接池druid配置详解的主要内容,如果未能解决你的问题,请参考以下文章

阿里巴巴数据库连接池 druid配置详解

[转]阿里巴巴数据库连接池 druid配置详解

数据库阿里连接池 druid配置详解

DRUID连接池配置详解——参数介绍

DRUID连接池的实用 配置详解

DRUID连接池的实用 配置详解以及监控配置