zoukankan      html  css  js  c++  java
  • Druid的简介

    Druid的简介

    Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!

    同时Druid不仅仅是一个数据库连接池,它包括四个部分:

        Druid是一个JDBC组件,它包括三个部分:

        基于Filter-Chain模式的插件体系。

        DruidDataSource 高效可管理的数据库连接池。

        SQLParser

    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层的扩展插件。

    所以Druid可以:
    1、充当数据库连接池。
    2、可以监控数据库访问性能
    3、获得SQL执行日志

    简单配置如下:

    [html] view plain copy
     
     
     
     
     在CODE上查看代码片派生到我的代码片
    1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">  
    2.     <property value="${jdbc_url}" name="url"></property>  
    3.     <property value="${jdbc_user}" name="username"></property>  
    4.     <property value="${jdbc_password}" name="password"></property>  
    5.    
    6.     <property value="stat" name="filters"></property>  
    7.    
    8.     <property value="20" name="maxActive"></property>  
    9.     <property value="1" name="initialSize"></property>  
    10.     <property value="60000" name="maxWait"></property>  
    11.     <property value="1" name="minIdle"></property>  
    12.    
    13.     <property value="60000" name="timeBetweenEvictionRunsMillis"></property>  
    14.     <property value="300000" name="minEvictableIdleTimeMillis"></property>  
    15.    
    16.     <property value="SELECT 'x'" name="validationQuery"></property>  
    17.     <property value="true" name="testWhileIdle"></property>  
    18.     <property value="false" name="testOnBorrow"></property>  
    19.     <property value="false" name="testOnReturn"></property>  
    20.     <property value="true" name="poolPreparedStatements"></property>  
    21.     <property value="20" name="maxPoolPreparedStatementPerConnectionSize"></property>  
    22. </bean>  


    3、Web.xml配置

    <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>

    至此基本配置完成,可以查看内置监控页面了,路径是/druid/index.html,

    2015八月
    11

    利用Druid实现应用和SQL监控

    一、关于Druid

    Druid是一个JDBC组件,它包括三部分: 

    • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 

    • DruidDataSource 高效可管理的数据库连接池。 

    • SQLParser 

    Druid可以做什么? 

    1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 

    2) 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 

    3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 

    4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 

    扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

    Druid开源中国社区地址:http://www.oschina.net/p/druid

    二、工程配置

    1、工程引入druid-1.0.15.jar

    2、数据源配置

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" lazy-init="false">
    <property name="driverClassName" value="#{db.driver}" />
    <property name="url" value="#{db.url}" />
    <property name="username" value="#{db.user}" />
    <property name="password" value="#{db.password}" />
    <property name="initialSize" value="1" />
    <property name="maxActive" value="50" />
    <property name="maxIdle" value="0" />
    <property name="maxWait" value="30000" />

    <property name="filters" value="stat,wall" />
    <property name="timeBetweenEvictionRunsMillis" value="3000" />  
    <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" />  
    <property name="poolPreparedStatements" value="true" />  
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    </bean>

    详细参数说明

    配置 缺省值 说明
    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,
    是组合关系,并非替换关系


    3、Web.xml配置

    <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>

    至此基本配置完成,可以查看内置监控页面了,路径是/druid/index.html,

    完整路径是http://127.0.0.1:8080/druid/index.html

    如果还需要使用Web应用、URI监控、Session监控、Spring监控等则还需要继续增加配置。

    4、Wen应用配置

    WebStatFilter用于采集web-jdbc关联监控的数据

    在Web.xml中增加配置,就可以使用Web应用、URI监控、Session监控等功能

    <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>
        <init-param>
        	<param-name>profileEnable</param-name>
        	<param-value>true</param-value>
    	</init-param>
    	<init-param>
            <param-name>principalCookieName</param-name>
            <param-value>USER_COOKIE</param-value>
        </init-param>
        <init-param>
            <param-name>principalSessionName</param-name>
            <param-value>USER_SESSION</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>DruidWebStatFilter</filter-name>
    
      <url-pattern>/*</url-pattern>
      </filter-mapping>

    5、Spring监控配置

    在Spring配置文件中增加

    <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
        </bean>
    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
       <property name="patterns">
           <list>
               <value>com.company.bussines.service.*</value>
               <value>com.company.bussines.dao.*</value>
           </list>
       </property>
    </bean>

    <aop:config proxy-target-class="true">
       <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />
    </aop:config>

    所有配置完成。

    岁月无声无息的溜走,除了带走一个无聊者的时光,还会沉淀一个努力者的人生。
  • 相关阅读:
    Get-CrmSetting返回Unable to connect to the remote server的解决办法
    Dynamics 365中的常用Associate和Disassociate消息汇总
    Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
    Dynamics Customer Engagement V9版本配置面向Internet的部署时候下一步按钮不可点击的解决办法
    Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
    注意,更改团队所属业务部门用Update消息无效!
    Dynamics 365的审核日志分区删除超时报错怎么办?
    Dynamics 365使用Execute Multiple Request删除系统作业实体记录
    Dynamics 365的系统作业实体记录增长太快怎么回事?
    Dynamics CRM日期字段查询使用时分秒的方法
  • 原文地址:https://www.cnblogs.com/dayandday/p/10646918.html
Copyright © 2011-2022 走看看