[转]阿里巴巴数据库连接池 druid配置详解
一、背景
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配置详解相关推荐
- c3p0数据库连接池的使用详解
首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...
- HikariCP连接池常用配置详解
除了dadaSourceClassName/jdbcUrl.username.password这三个必须配置之外,HikariCP还有一些非必须配置,非必需配置包含的常用配置和非常用配置都是可选的.H ...
- Spring学习总结(21)——Spring集成阿里巴巴数据库连接池DruidDataSource配置及其常见问题汇总
一.参考配置如下 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" ...
- Druid 连接池的实用 配置详解
Druid连接池参数配置详解 druid为阿里巴巴的数据源,(数据库连接池),集合了c3p0.dbcp.proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况. DRU ...
- DRUID 连接池的使用、配置详解
DRUID 连接池的使用.配置详解 本篇参考:原文链接 一.DRUID 介绍: DRUID 是阿里巴巴开源平台上一个数据库连接池实现,它结合了 C3P0.DBCP.PROXOOL等DB池的优点,同时加 ...
- Spring Boot 使用 HikariCP 连接池配置详解
Spring Boot 使用 HikariCP 连接池配置详解 HikariCP 是一个高性能的 JDBC 连接池组件. Spring Boot 2.x 将其作为默认的连接池组件,项目中添加 spri ...
- Hikari连接池配置详解
Hikari连接池配置详解 ## 数据库配置 spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.d ...
- Druid 0.2.18 发布,阿里巴巴数据库连接池
阿里开源数据库连接池druid发布0.2.18版本,主要增强对tddl的支持和bug修复. Bug [DRUID-243] - 当log4j不存在时不该输出错误信息 [DRUID-244] - Ora ...
- mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置
SpringBoot使用阿里数据库连接池Druid以及多数据源配置 引入依赖 com.alibaba druid 1.0.29 数据源配置 1.数据源 #master数据源 spring.dataso ...
最新文章
- 驱动数字经济加速,摩尔线程发布全新元计算架构MUSA和GPU产品
- 小米合作鸿蒙系统了么,小米等国产手机会使用鸿蒙系统吗?
- SAP HANA Hint简介
- python调用函数示例_python 动态调用函数实例解析
- zeppelin报错master is set as yarn, but spark.submit.deployMode is not specified
- jQuery选择器和选取方法
- 2016-12-17 新浪博客服务器挂掉了,所有博客页面都无法打开
- mysql rpm 启动_MySQL安装(rpm)和启动配置
- 教你用python爬取网站数据
- jquery-事件绑定
- WEB站点服务器安全配置
- Java基础学习总结(67)——Java接口API中使用数组的缺陷
- 【Eclipse】Eclipse中tomcat的Server配置(解决修改代码不断的重启服务器)以及设置tomcat文件发布位置与JSP编译位置查看...
- 【word使用技巧】删掉某一行参考
- 普通用户通过Putty密钥方式登录
- 系统备份恢复 Acronis True Image使用教程
- C语言知识点思维导图
- 李春葆、严蔚敏关于KMP算法的next数组值差1
- Design Compiler工具学习笔记(6)
- TortoiseGit(乌龟)------安装教程