Druid简单使用配置及介绍惠买集团Guanping.LiDruid介绍Druid介绍Druid是阿里 巴巴的温少(温绍锦)团队开发的。Druid是什么?druid凭借其出色的性能成为一名数据库连接池的后起之秀. Druid首先是一个数据库连接池(DruidDataSource),它还包含一个ProxyDriver(Filter-C hain模式驱动代理),一系列内置的JDBC组件库,一个SQLParser(解析)。一、强大的监控特性:通过 Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。1、监控SQL的执行时间、ResultSet持有时间、返回行 数、更新行数、错误次数、错误堆栈信息。2、SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了10 00次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,1 0秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。3、监控连接池的物理连接创建和销毁次数、逻辑 连接的申请和关闭次数、非空等待次数、PSCache命中率等。二、方便扩展:Druid提供了Filter-Chain模式的扩 展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志 等等。Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的W allFilter。另外还有用于数据库密码加密的CirceFilter,以及和Web、Spring关联监控的DragoonStat Filter。Guanping.LiDruid介绍三、优秀特性:1、ExceptionSorter。当一个连接产生 不可恢复的异常时,例如Oracleerror_code_28sessionhasbeenkilled,必须立刻从连接池中 逐出,否则会产生大量错误.目前只有Druid和JBossDataSource实现了ExceptionSorter.2、 PSCache内存占用优化对于支持游标的数据库(Oracle、SQLServer、DB2等,不包括MySql),PSCache可 以大幅度提升SQL执行性能。一个PreparedStatement对应服务器一个游标,如果PreparedStatement被缓存 起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似“SELECT FROMTWHEREID=?”这样的场景,性能可能是一个数量级的提升。但在OracleJDBCDriver中,其他 的数据库连接池(DBCP、JBossDataSource)会占用内存过多,极端情况可能大于1G。Druid调用OracleDriv er提供管理PSCache内部API。3、LRU(LeastRecentlyUsed最近最少使用)是一个性能关键指标 ,特别Oracle,每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,有助于数据库服务器优化,这是重要的 指标。Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0则不是。BoneCP在mock环境下性 能可能还好,但在真实环境中则就不好了。四、Maven中druid的Jar包引用:(pom.xml)在Maven中引用d ruid比较新的Jar包,在我的环境中导入了druid源码,项目则可引用源码项目druidMaster com.alibabadruidrtifactId>1.0.24在JavaB uildPath-->Projects-->druidMasterGuanping.LiDruid配置DruidDat aSource数据源Guanping.LiDruid配置主要有以下几项:配置_DruidDataSource数据源 -----1、配置数据源配置_StatFilter-----2、 Druid的内置监控功能:打开Druid的监控统计功能配置_StatViewServlet -----3、展示Druid的统计信息,显示监控信息配置_WebStatFilter -----4、?(配置allow和deny),对以上显示的监控信息做访问控制配置_Druid和Spring关联监控 -----5、关联Spring监控信息拦截显示配置_使用ConfigFilter -----6、为数据库密码提供加密功能和读取文件配置1、配置_DruidDataSource数据源:以下是一个参考的连接 池配置:(context-datasource-jdbc.xml)lass="com.alibaba.druid.pool.DruidDataSource"init-method=" init"destroy-method="close">Name">#{conf[''com.driver'']}opertyname="url">#{conf[''com.url'']} #{conf[''com.user'']}>#{conf[''com .passwd'']}Druid配置 ue="30">
value="5000"> 000"/>oveAbandoned"value="true"/>
validationQuery"value="select1fromdual"/>Druid配置DruidDataSou rce数据源Guanping.LiGuanping.Lialue="false">lue="false"/>alue="true"/> rtyname="timeBetweenEvictionRunsMillis"value="180000"/>opertyname="poolPreparedStatements"value="true"/>ropertyname="maxPoolPreparedStatementPerConnectionSize"value="2 0"/>2、配置_StatFilter:Druid的监控统计功能是通过filter-chain扩展实现 (spring/service/context-datasource-jdbc.xml)< !--使用Druid的内置监控功能:打开Druid的监控统计功能-->/>id.stat.slowSqlMillis=300000"/>配置_StatFilterGuanping.L i
y>配置_StatFilterGuanping.Li--也可以通过connectProperties属性来打开mergeSql功能,或者通过增加JVM的参数配 置:-Ddruid.stat.mergeSql=truerties"value="druid.stat.mergeSql=true"/>-->obalDataSourceStat"value="true"/>s="com.alibaba.druid.filter.stat.StatFilter">="slowSqlMillis"value="30000"/>"value="true"/>其中: DruidWebStatFilterlass>com.alibaba.druid.support.http.WebStatFilter exclusionsm-name>.js,.gif,.jpg,.png,.css, .ico,/druid/-param>sessionStatMaxCount 1000
sessionStatEnable true Guanping.Li principalSessionName 802720.user
principalCookieNamearam-value>admin.user profileEnable aram-name>true init-param> DruidWebStatFilter /配置 _StatViewServlet配置_WebStatFilterGuanping.Li4、配置_WebStatFilter: ?(配置allow和deny)(web.xml)StatViewSerlvet展示出来的监控信息比较敏感,是系统运行的内部 情况,如果你需要做访问控制,可以配置allow和deny这两个参数。判断规则:deny优先于allow,如果在deny列表中,就算 在allow列表中,也会被拒绝。如果allow没有配置或者为空,则允许所有访问。比如:< servlet-name>DruidStatViews>com.alibaba.druid.support.http.StatViewServlet
aram-name>resetEnabletrue< /param-value> loginUsernamename>druidit-param>配置_WebStatFilterram>loginPassword druid allow 10.9.12.117/24,128.242.128.1 m-name>deny10.9.12.117 param-value>et-mapping>DruidStatView /druid/ping>Guanping.Li配置_Druid和Spring关联监控Guanping.Li5、配置_Druid和Spri ng关联监控(spring/service/context-component-scan.xml)Druid提供了Spring 和Jdbc的关联监控:com.alibaba.druid.support.spring.stat.DruidStatInterce ptor是一个标准的SpringMethodInterceptor。可以灵活进行AOP配置。ibaba.druid.support.spring.stat.DruidStatInterceptor">-- DruidStatInterceptor实现了org.aopalliance.intercept.MethodIntercept or和Spring的org.springframework.beans.factory.InitializingBean和org. springframework.beans.factory.DisposableBean接口uid.support.spring.stat.BeanTypeAutoProxyCreator">e"value="com.gsshop.biz.prd.service.ProductService"/>< propertyname="interceptorNames"> druid-stat-interceptor
Guanping.Li配置_Druid和Spring关联监控Guanping.LifailureHandleruserDetailsService druid-stat-interceptor 6、配置_使用ConfigFilter参考文档“使用ConfigFilter”。配置_Druid和Spring关联监控 |
|