配置
和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,建议开启。 |
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, 是组合关系,并非替换关系 |
配置项中指定了各个参数后,在连接池内部是这么使用这些参数的。数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接。如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放掉某一个连接,如果这个等待时间超过了maxWait,则会报错;如果当前正在使用的连接数没有达到maxActive,则判断当前是否空闲连接,如果有则直接使用空闲连接,如果没有则新建立一个连接。在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他操作复用。
同时连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。如果当前连接池中某个连接在空闲了timeBetweenEvictionRunsMillis时间后任然没有使用,则被物理性的关闭掉。有些数据库连接的时候有超时限制(mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,这时候设置一个testWhileIdle参数为true,可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。
2、监控
<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>
ajax进行轮询
function showTime() { var myDate = new Date(); var timeStr = ''; timeStr += myDate.getFullYear()+'-'; //获取完整的年份(4位,1970-????) timeStr += myDate.getMonth()+'-'; //获取当前月份(0-11,0代表1月) timeStr += myDate.getDate() + ' '; //获取当前日(1-31) timeStr += myDate.getHours()+':'; //获取当前小时数(0-23) timeStr += myDate.getMinutes()+':'; //获取当前分钟数(0-59) timeStr += myDate.getSeconds(); //获取当前秒数(0-59) return timeStr } $(document).ready(function() { function loadDBTestMessage() { $.get('servlet/MysqlTestServlet',function(data) { if (typeof(data) != 'object') { data = eval('(' + data + ')'); } var html = '['+showTime()+']'; html += '创建:' + data['createResult']; html += '插入:' + data['insertResult']; html += '销毁:' + data['dropResult']; html += $('#message').html(html); }); } setInterval(function() { loadDBTestMessage(); }, 10000); });
这时打开http://localhost/druid-web/druid/ 地址,会看到监控界面,点击其中的sql标签
Druid集连接池,监控于一体整好复合当前项目的需要,项目是ssh结构,之前是用C3p0的,现在换一个连接池也是很简单的,首先spring配置DataSource,配置如下:
<bean id="dataSource" class="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>
目前这样的配置已经能够使用连接池,注意不要忘记了jar文件,下载地址:http://code.alibabatech.com/mvn/releases/com/alibaba/druid/
然后是监控的配置:
web.xml
<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>
filter可以监控webURl 访问
<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>
该配置可以访问监控界面
配置好后访问 http://ip:port/projectName/druid/index.html
经过上面的配置,我们已经能够达到连接池的使用和监控,这个只是简单的入门,如果还要更详细的学习,还得论坛上多多交流。
相关推荐
Druid是阿里巴巴开源的一个强大、灵活且高性能的Java数据库连接池组件。它提供了监控、SQL解析、执行性能统计等多种功能,广泛应用于各种Java企业级项目中。Druid-1.2.8版本源码的分析可以帮助我们深入理解其内部...
【阿里Druid简介】 Druid是阿里巴巴开源的一个数据库连接池组件,它不仅是一个优秀的数据库连接池,还包含SQL解析、监控、扩展性等多方面的功能。Druid在性能上表现优秀,提供了强大的监控和扩展机制,是许多Java...
Apache Druid 是一个高性能、实时分析数据库,主要用于大数据的在线分析处理。它以其强大的查询性能、低延迟和可扩展性在大数据领域中广受好评。在深入理解Druid之前,我们首先需要了解它作为连接池的角色,以及...
Druid是阿里巴巴开源的一个高效、强大的数据库连接池组件,它的全称是Dynamic Routing Data Source,即动态路由数据源。在Java Web开发中,数据库连接池扮演着至关重要的角色,它负责管理数据库连接,提高数据库操作...
赠送jar包:druid-1.1.9.jar; 赠送原API文档:druid-1.1.9-javadoc.jar; 赠送源代码:druid-1.1.9-sources.jar; 赠送Maven依赖信息文件:druid-1.1.9.pom; 包含翻译后的API文档:druid-1.1.9-javadoc-API文档-...
### 如何去除Druid监控中的阿里广告 #### 一、问题背景 在使用Java集成阿里云的Druid数据源进行数据库连接池管理时,我们可能会遇到一个比较烦人的问题:Druid控制台页面下方默认会显示一条来自阿里的横幅广告。...
赠送jar包:druid-1.1.10.jar; 赠送原API文档:druid-1.1.10-javadoc.jar; 赠送源代码:druid-1.1.10-sources.jar; 赠送Maven依赖信息文件:druid-1.1.10.pom; 包含翻译后的API文档:druid-1.1.10-javadoc-API...
赠送jar包:druid-1.2.8.jar; 赠送原API文档:druid-1.2.8-javadoc.jar; 赠送源代码:druid-1.2.8-sources.jar; 赠送Maven依赖信息文件:druid-1.2.8.pom; 包含翻译后的API文档:druid-1.2.8-javadoc-API文档-...
赠送jar包:druid-1.1.16.jar; 赠送原API文档:druid-1.1.16-javadoc.jar; 赠送源代码:druid-1.1.16-sources.jar; 赠送Maven依赖信息文件:druid-1.1.16.pom; 包含翻译后的API文档:druid-1.1.16-javadoc-API...
大数据Druid集群实时分析搭建 Druid是大数据实时分析平台,能够处理大量数据的实时查询和分析。以下是大数据Druid集群实时分析搭建的详细步骤和知识点: 环境准备 * 3台ECS服务器,each with 4 cores, 8G memory,...
Druid是阿里巴巴开源的一个数据库连接池组件,它在Java开发中被广泛使用,为应用程序提供高效、灵活、稳定的数据库连接管理。这个"druid-1.2.5.rar"压缩包包含的是Druid的1.2.5版本,该版本可能包含了源代码、jar包...
赠送jar包:druid-1.2.8.jar; 赠送原API文档:druid-1.2.8-javadoc.jar; 赠送源代码:druid-1.2.8-sources.jar; 赠送Maven依赖信息文件:druid-1.2.8.pom; 包含翻译后的API文档:druid-1.2.8-javadoc-API文档-...
在Spring Boot应用中,Druid和JPA是两种常见的数据库操作工具。Druid是一个功能强大的数据库连接池,而JPA(Java Persistence API)是Java平台上的一个标准,用于对象关系映射(ORM)。本篇文章将深入探讨如何在...
赠送jar包:druid-1.0.14.jar; 赠送原API文档:druid-1.0.14-javadoc.jar; 赠送源代码:druid-1.0.14-sources.jar; 包含翻译后的API文档:druid-1.0.14-javadoc-API文档-中文(简体)版.zip 对应Maven信息:...
标题所指的知识点为“Druid 源码分析 逐层详解”,意味着我们需要深入分析Druid这一开源数据处理工具的源码,并从不同的层面揭示其内部实现机制。 首先,我们来看Druid的构架设计。Druid采用了分层的架构,每个层次...
**Druid监控系统安装与配置详解** Druid是一款高性能、多功能的数据库连接池,它集成了数据源管理、SQL解析、执行计划展示、监控、扩展点等众多功能。在复杂和高并发的环境中,对数据库连接池进行实时监控至关重要...
Druid是阿里巴巴开源组织提供的一款强大的Java数据库连接池组件,全称为Dynamic Resourec Unicode Druid,其版本号为1.1.10。Druid的主要功能包括数据库连接池管理、SQL解析与执行监控、数据源健康检查以及日志监控...
Druid连接池是阿里巴巴开源的一款高性能数据库连接池组件,版本1.1.10在众多项目中广泛使用并受到良好的反馈。这个组件的核心目标是提供监控、扩展性和性能优化的数据库连接管理服务。以下是对Druid连接池1.1.10版的...
Druid是阿里巴巴开源的一款高效、强大的数据库连接池组件,它在Java编程中广泛应用于大数据量、高并发的Web应用中。Druid不仅提供了基础的数据库连接池功能,还集成了监控、SQL解析、参数绑定等多个高级特性,为开发...