一、背景

  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的仓库中获取
    <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version>
    </dependency>

2. 配置示例

  spring.xml文件中加入:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"><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><!-- 阿里 druid 数据库连接池 --><bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" destroy-method = "close" ><!-- 数据库基本信息配置 --><property name = "url" value = "${jdbc.url}" /><property name = "username" value = "${jdbc.username}" /><property name = "password" value = "${jdbc.password}" /><property name = "driverClassName" value = "${jdbc.driverClassName}" /><property name = "filters" value = "${jdbc.filters}" /><!-- 最大并发连接数 --><property name = "maxActive" value = "${jdbc.maxActive}" /><!-- 初始化连接数量 --><property name = "initialSize" value = "${jdbc.initialSize}" /><!-- 配置获取连接等待超时的时间 --><property name = "maxWait" value = "${jdbc.maxWait}" /><!-- 最小空闲连接数 --><property name = "minIdle" value = "${jdbc.minIdle}" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name = "timeBetweenEvictionRunsMillis" value ="${jdbc.timeBetweenEvictionRunsMillis}" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name = "minEvictableIdleTimeMillis" value ="${jdbc.minEvictableIdleTimeMillis}" /><property name = "validationQuery" value = "${jdbc.validationQuery}" /><property name = "testWhileIdle" value = "${jdbc.testWhileIdle}" /><property name = "testOnBorrow" value = "${jdbc.testOnBorrow}" /><property name = "testOnReturn" value = "${jdbc.testOnReturn}" /><property name = "maxOpenPreparedStatements" value ="${jdbc.maxOpenPreparedStatements}" /><!-- 打开 removeAbandoned 功能 --><property name = "removeAbandoned" value = "${jdbc.removeAbandoned}" /><!-- 1800 秒,也就是 30 分钟 --><property name = "removeAbandonedTimeout" value ="${jdbc.removeAbandonedTimeout}" /><!-- 关闭 abanded 连接时输出错误日志 --><property name = "logAbandoned" value = "${jdbc.logAbandoned}" /></bean>
</beans>    

  dbconfig.properties

jdbc.url=jdbc:mysql://localhost:3306/newm

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.username=rootjdbc.password=rootjdbc.filters=statjdbc.maxActive=20jdbc.initialSize=1jdbc.maxWait=60000jdbc.minIdle=10jdbc.maxIdle=15jdbc.timeBetweenEvictionRunsMillis=60000jdbc.minEvictableIdleTimeMillis=300000jdbc.validationQuery=SELECT 'x'jdbc.testWhileIdle=truejdbc.testOnBorrow=falsejdbc.testOnReturn=falsejdbc.maxOpenPreparedStatements=20jdbc.removeAbandoned=truejdbc.removeAbandonedTimeout=1800jdbc.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-->

访问监控页面: 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. c3p0数据库连接池的使用详解

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

  2. HikariCP连接池常用配置详解

    除了dadaSourceClassName/jdbcUrl.username.password这三个必须配置之外,HikariCP还有一些非必须配置,非必需配置包含的常用配置和非常用配置都是可选的.H ...

  3. Spring学习总结(21)——Spring集成阿里巴巴数据库连接池DruidDataSource配置及其常见问题汇总

    一.参考配置如下 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" ...

  4. Druid 连接池的实用 配置详解

    Druid连接池参数配置详解 druid为阿里巴巴的数据源,(数据库连接池),集合了c3p0.dbcp.proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况. DRU ...

  5. DRUID 连接池的使用、配置详解

    DRUID 连接池的使用.配置详解 本篇参考:原文链接 一.DRUID 介绍: DRUID 是阿里巴巴开源平台上一个数据库连接池实现,它结合了 C3P0.DBCP.PROXOOL等DB池的优点,同时加 ...

  6. Spring Boot 使用 HikariCP 连接池配置详解

    Spring Boot 使用 HikariCP 连接池配置详解 HikariCP 是一个高性能的 JDBC 连接池组件. Spring Boot 2.x 将其作为默认的连接池组件,项目中添加 spri ...

  7. Hikari连接池配置详解

    Hikari连接池配置详解 ## 数据库配置 spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.d ...

  8. Druid 0.2.18 发布,阿里巴巴数据库连接池

    阿里开源数据库连接池druid发布0.2.18版本,主要增强对tddl的支持和bug修复. Bug [DRUID-243] - 当log4j不存在时不该输出错误信息 [DRUID-244] - Ora ...

  9. mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置

    SpringBoot使用阿里数据库连接池Druid以及多数据源配置 引入依赖 com.alibaba druid 1.0.29 数据源配置 1.数据源 #master数据源 spring.dataso ...

最新文章

  1. 驱动数字经济加速,摩尔线程发布全新元计算架构MUSA和GPU产品
  2. 小米合作鸿蒙系统了么,小米等国产手机会使用鸿蒙系统吗?
  3. SAP HANA Hint简介
  4. python调用函数示例_python 动态调用函数实例解析
  5. zeppelin报错master is set as yarn, but spark.submit.deployMode is not specified
  6. jQuery选择器和选取方法
  7. 2016-12-17 新浪博客服务器挂掉了,所有博客页面都无法打开
  8. mysql rpm 启动_MySQL安装(rpm)和启动配置
  9. 教你用python爬取网站数据
  10. jquery-事件绑定
  11. WEB站点服务器安全配置
  12. Java基础学习总结(67)——Java接口API中使用数组的缺陷
  13. 【Eclipse】Eclipse中tomcat的Server配置(解决修改代码不断的重启服务器)以及设置tomcat文件发布位置与JSP编译位置查看...
  14. 【word使用技巧】删掉某一行参考
  15. 普通用户通过Putty密钥方式登录
  16. 系统备份恢复 Acronis True Image使用教程
  17. C语言知识点思维导图
  18. 李春葆、严蔚敏关于KMP算法的next数组值差1
  19. Design Compiler工具学习笔记(6)
  20. TortoiseGit(乌龟)------安装教程

热门文章

  1. UIView自定义控件-Swfit
  2. ABC Perl Programing - 回 2gua 短消息
  3. Docker安装MariaDB
  4. 你不知道的CSS单位
  5. Hystrix的一个坑,queue中的run方法没有被执行?
  6. django-request对象
  7. linux 知识汇总
  8. sqlserver监控阻塞(死锁)具体情况
  9. jQuery 原理的模拟代码 -4 重要的扩展函数 extend
  10. 保持一颗好学之心(转)