druid数据库连接池源码(Druid连接池)
本文目录一览:
- 1、druid连接池 SPRING怎样实现配置数据源
- 2、为什么说druid是"最好的数据库连接池"?体现在哪些方面
- 3、Druid连接池自定义数据库密码加解密怎么实现
- 4、为什么说Druid是“最好的数据库连接池”
druid连接池 SPRING怎样实现配置数据源
Druid连接池及监控在Spring配置如下:
[html] view plaincopy
bean id="dataSource" class="bff1-be20-31a4-a850 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包免费下载。
然后是监控的配置:
web.xml
[html] view plaincopy
span style="white-space:pre" /spanfilter
filter-nameDruidWebStatFilter/filter-name
filter-classcom.alibaba.druid.support.http.WebStatFilter/filter-class
init-param
param-nameexclusions/param-name
param-value*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*/param-value
/init-param
/filter
filter-mapping
filter-nameDruidWebStatFilter/filter-name
url-pattern/*/url-pattern
/filter-mapping
filter可以监控webURl 访问
[html] view plaincopy
span style="white-space:pre" /spanservlet
servlet-nameDruidStatView/servlet-name
servlet-classcom.alibaba.druid.support.http.StatViewServlet/servlet-class
/servlet
servlet-mapping
servlet-nameDruidStatView/servlet-name
url-pattern/druid/*/url-pattern
为什么说druid是"最好的数据库连接池"?体现在哪些方面
现在常用的开源数据库连接池主要有c3p0、dbcp、proxool三种,其中:
Spring 推荐使用dbcp;
Hibernate 推荐使用c3p0和proxool;
1、 DBCP:apache
DBCP(DataBase connection pool)数据库连接池。是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲连接的功能。
2、 C3P0:
C3P0是一个开源的jdbc连接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步操作的,缓慢的jdbc操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。
3、 Proxool:Sourceforge
Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。
对比:
1 相同时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能测试参数(Average,median,90%Line)进行比较发现:性能dbcp=c3p0proxool;
2 不同情况下的同一数据库连接池测试:通过观察 Average,median,90%Line三个参数发
现三个连接池的稳定性(三种连接池的三个测试参数的变化情况)依次:稳定性dbcp=c3p0proxool。
结论:
通过对三种数据库连接池的性能测试发现,proxool和 c3p0能够更好的支持高并发,但是在稳定性方面略逊于 dpcp;
Druid连接池自定义数据库密码加解密怎么实现
Druid的功能
1、替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
2、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
3、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
4、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。
其中第三条说出了本博客的一个目的,详细过程如下:
1、首先配置Druid的数据库连接池
!--数据源加密操作--
bean id="dbPasswordCallback" class="be20-31a4-a850-09aa com.xuliugen.db.config.DBPasswordCallback" lazy-init="true"/
bean id="statFilter" class="31a4-a850-09aa-b8ce com.alibaba.druid.filter.stat.StatFilter" lazy-init="true"
property name="logSlowSql" value="true"/
property name="mergeSql" value="true"/
/bean
!
-- 数据库连接 --
bean id="readDataSource" class="a850-09aa-b8ce-d3f3 com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" init-method="init" lazy-init="true"
property name="driverClassName" value="${driver}"/
property name="url" value="${url1}"/
property name="username" value="${username}"/
property name="password" value="${password}"/
!-- 初始化连接大小 --
property name="initialSize" value="${initialSize}"/
!-- 连接池最大数量 --
property name="maxActive" value="${maxActive}"/
!-- 连接池最小空闲 --
property name="minIdle" value="${minIdle}"/
!-- 获取连接最大等待时间 --
property name="maxWait" value="${maxWait}"/
!-- --
property name="defaultReadOnly" value="true"/
property name="proxyFilters"
list
ref bean="statFilter"/
/list
/property
property name="filters" value="${druid.filters}"/
property name="connectionProperties" value="password=${password}"/
property name="passwordCallback" ref="dbPasswordCallback"/
property name="testWhileIdle" value="true"/
property name="testOnBorrow" value="false"/
property name="testOnReturn" value="false"/
property name="validationQuery" value="SELECT 'x'"/
property name="timeBetweenLogStatsMillis" value="60000"/
!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --
property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"/
!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --
property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/
/bean
其中要注意的是:
bean id="dbPasswordCallback" class="09aa-b8ce-d3f3-34b2 com.xuliugen.db.config.DBPasswordCallback" lazy-init="true"/
property name="passwordCallback" ref="dbPasswordCallback"/
为什么说Druid是“最好的数据库连接池”
1、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
2、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
3、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
4、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。