一、背景

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

二、jar包下载、配置详解及配置示例

1. jar包获取

  • 可以从 http://repo1.maven.org/maven2/com/alibaba/druid/ 下载最新的jar包。
  • 如果想使用最新的源码编译,也可以从 https://github.com/alibaba/druid 下载源码,然后使用maven命令行,或者导入到IDEA中进行编译获得。
  • 从maven的仓库中获取
    1. <dependency>
    2. <groupId>com.alibaba</groupId>
    3. <artifactId>druid</artifactId>
    4. <version>1.1.6</version>
    5. </dependency>

2. 配置示例

  spring.xml文件中加入:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
  6.  
  7. <bean name = "transactionManager"
          class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
  8. <property name = "dataSource" ref = "dataSource" ></ property >
  9. </bean >
  10.  
  11. <bean id = "propertyConfigurer"
          class ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
  12. <property name = "locations" >
  13. <list>
  14. <value > /WEB-INF/classes/dbconfig.properties </ value >
  15. </list>
  16. </property>
  17. </bean>
  18.  
  19. <!-- 阿里 druid 数据库连接池 -->
  20. <bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" destroy-method = "close" >
  21.   <!-- 数据库基本信息配置 -->
  22.   <property name = "url" value = "${jdbc.url}" />
  23.   <property name = "username" value = "${jdbc.username}" />
  24.   <property name = "password" value = "${jdbc.password}" />
  25.   <property name = "driverClassName" value = "${jdbc.driverClassName}" />
  26.   <property name = "filters" value = "${jdbc.filters}" />
  27.  
  28.   <!-- 最大并发连接数 -->
  29.   <property name = "maxActive" value = "${jdbc.maxActive}" />
  30.  
  31.   <!-- 初始化连接数量 -->
  32.   <property name = "initialSize" value = "${jdbc.initialSize}" />
  33.  
  34.   <!-- 配置获取连接等待超时的时间 -->
  35.   <property name = "maxWait" value = "${jdbc.maxWait}" />
  36.  
  37.   <!-- 最小空闲连接数 -->
  38.   <property name = "minIdle" value = "${jdbc.minIdle}" />
  39.  
  40.   <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  41.  <property name = "timeBetweenEvictionRunsMillis" value ="${jdbc.timeBetweenEvictionRunsMillis}" />
  42.  
  43.   <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  44.   <property name = "minEvictableIdleTimeMillis" value ="${jdbc.minEvictableIdleTimeMillis}" />
  45.  
  46.   <property name = "validationQuery" value = "${jdbc.validationQuery}" />
  47.   <property name = "testWhileIdle" value = "${jdbc.testWhileIdle}" />
  48.   <property name = "testOnBorrow" value = "${jdbc.testOnBorrow}" />
  49.   <property name = "testOnReturn" value = "${jdbc.testOnReturn}" />
  50.   <property name = "maxOpenPreparedStatements" value ="${jdbc.maxOpenPreparedStatements}" />
  51.  
  52.   <!-- 打开 removeAbandoned 功能 -->
  53.   <property name = "removeAbandoned" value = "${jdbc.removeAbandoned}" />
  54.  
  55.   <!-- 1800 秒,也就是 30 分钟 -->
  56.   <property name = "removeAbandonedTimeout" value ="${jdbc.removeAbandonedTimeout}" />
  57.  
  58.   <!-- 关闭 abanded 连接时输出错误日志 -->
  59.   <property name = "logAbandoned" value = "${jdbc.logAbandoned}" />
  60. </bean>
  61. </beans>

  dbconfig.properties

  1. jdbc.url=jdbc:mysql://localhost:3306/newm
  2.  
  3. jdbc.driverClassName=com.mysql.jdbc.Driver
  4.  
  5. jdbc.username=root
  6.  
  7. jdbc.password=root
  8.  
  9. jdbc.filters=stat
  10.  
  11. jdbc.maxActive=20
  12.  
  13. jdbc.initialSize=1
  14.  
  15. jdbc.maxWait=60000
  16.  
  17. jdbc.minIdle=10
  18.  
  19. jdbc.maxIdle=15
  20.  
  21. jdbc.timeBetweenEvictionRunsMillis=60000
  22.  
  23. jdbc.minEvictableIdleTimeMillis=300000
  24.  
  25. jdbc.validationQuery=SELECT 'x'
  26.  
  27. jdbc.testWhileIdle=true
  28.  
  29. jdbc.testOnBorrow=false
  30.  
  31. jdbc.testOnReturn=false
  32.  
  33. jdbc.maxOpenPreparedStatements=20
  34.  
  35. jdbc.removeAbandoned=true
  36.  
  37. jdbc.removeAbandonedTimeout=1800
  38.  
  39. jdbc.logAbandoned=true

  web.xml

  1. <!-- 连接池 启用 Web 监控统计功能 start-->
  2. <filter>
  3. <filter-name>DruidWebStatFilter</filter-name>
  4. <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
  5. <init-param>
  6. <param-name>exclusions</param-name>
  7. <param-value>*.js ,*.gif ,*.jpg ,*.png ,*.css ,*.ico ,/druid/*</param-value>
  8. </init-param>
  9. </filter>
  10.  
  11. <filter-mapping>
  12. <filter-name>DruidWebStatFilter</filter-name>
  13. <url-pattern>/*</url-pattern>
  14. </filter-mapping>
  15.  
  16. <servlet>
  17. <servlet-name>DruidStatView</servlet-name>
  18. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  19. </servlet>
  20.  
  21. <servlet-mapping>
  22. <servlet-name>DruidStatView</servlet-name>
  23. <url-pattern>/druid/*</url-pattern>
  24. </servlet-mapping>
  25. <!-- 连接池 启用 Web 监控统计功能 end-->

访问监控页面: http://ip:port/projectName/druid/index.html.

3.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中,不会存在Oracle下PSCache占用内存过多的问题, 
可以把这个数值配置大一些,比如说100
validationQuery   用来检测连接是否有效的sql,要求是一个查询语句。 
如果validationQuery为null,testOnBorrow、testOnReturn、 
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>, 
如果同时配置了filters和proxyFilters, 
是组合关系,并非替换关系

[转]阿里巴巴数据库连接池 druid配置详解的更多相关文章

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

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  2. 数据库连接池----Druid配置详解

    什么是连接池? 数据库连接池出现的原因在数据库连接资源的低效管理,使用数据库连接池是基于设计模式中的资源池的概念,从而解决资源频繁是分配.释放所造成的问题. 数据库连接池的基本思想就是为数据库连接建立 ...

  3. 数据库阿里连接池 Druid配置详解以及web监控统计

    java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...

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

    http://blog.csdn.net/hj7jay/article/details/51686418 http://lj6684.iteye.com/blog/1770093 http://www ...

  5. c3p0数据库连接池的使用详解

    首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...

  6. (阿里巴巴)数据库连接池——Druid (未完持续更新)

    Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...

  7. druid 参数配置详解

    druid 参数配置详解 */--> druid 参数配置详解 Table of Contents 1. 初始化连接 2. 参数配置及说明 3. 注意事项 3.1. 底层连接 3.2. 空闲检查 ...

  8. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  9. 数据库连接池优化配置(druid,dbcp,c3p0)

    主要描述了数据库连接池参数配置的准则,针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置. 考虑因素 1:当前连接DB的规模   2:并发情况 3:执行db的响应时间 配置考虑 1 ...

随机推荐

  1. cocos初认识

    一直知道cocos是做游戏的,想学习一下,结果去官网一看就懵逼了.Cocos Creator,Cocos2d-x,cocos studio,Cocos2d-js,Cocos2d-x-lua,那一种才是 ...

  2. python gettitle v2.0

    #!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...

  3. 分享一些平时测试用的sql payloads

    1:BOOL SQLINJECTION \'"%df'%df" and 1=1 and 1=2' and '1'='1' and '1'='2" and "1& ...

  4. javascript随机打乱数组

    var arr=[]; ;i<;i++){ arr[i]=i; } arr.sort(function(){ return 0.5 - Math.random() }) var str=arr. ...

  5. 用pyspider爬淘宝MM照片

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-12-09 15:24:54 # Project: taobaomm ...

  6. Chrome 开发工具之Console

    前段时间看git的相关,记的笔记也大致写到了博客上,还有些因为运用不熟,或者还有一些疑惑点,暂时也不做过多纠缠,之后在实践中多运用得出结论再整理分享吧. 工欲善其事,必先利其器.要想做好前端的工作,也 ...

  7. python笔记1-转义字符

    print(r'dd"e"f')print(r'dd'e'f')print(r"dd"e"f")print(r"dd'e'f&qu ...

  8. Spring MVC学习笔记——完整的用户登录

    1.搭建环境的第一步是导包,把下面这些包都导入工程中 /media/common/工作/Ubuntu软件/SpringMVC_jar包整理/aop/media/common/工作/Ubuntu软件/S ...

  9. Codeforces Round 319 # div.1 & 2 解题报告

    Div. 2 Multiplication Table (577A) 题意: 给定n行n列的方阵,第i行第j列的数就是i*j,问有多少个格子上的数恰为x. 1<=n<=10^5, 1< ...

  10. runtime-给系统已有类添加属性

    在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添 ...