Druid在项目中的应用

来源:互联网 发布:淘宝账号注销后支付宝 编辑:程序博客网 时间:2024/05/22 01:06

  前言:

   每天都在成长着,经历着。而csdn是我记录成长的地方。所以迫不及待将新知道的知识,记录下来。分享给大家。

  内容:

   正如题目所言,我们想要用一个东西,首先要知道这个东西是什么,然后再说怎么用。那么接下来小编就按照这个思路,来介绍一下Druid。

  一、什么是Druid

  Druid是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统。旨在快速处理大规模的数据,并能够实现快速查询和分析。尤其是当发生代码部署,机器过账以及其他产品系统遇到宕机等情况时,Druid仍能保持100%正常运行。Druid是一个JDBC组件,它包括三个部分:DruidDriver,代理Driver,能够提供基于Filter-Chiain模式的插件体系;DruidDdataSource高效可管理的数据库连接池;SQLParser。

  二、Druid可以做什么

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

  惊讶  替换DBCP和C3P0连接池。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

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

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

  三、Druid在项目中的应用

  本次项目开发中用到的是struts2+spring+hibernate,在web.xml中配置了过滤器,所以在web文件中需要配置Druid的servlet和去除对druid的拦截。具体代码如下:

  

!-- 配置druid的servlet --> <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的拦截 --><init-param>    <param-name>excludedPages</param-name>    <param-value>/druid*</param-value>    </init-param>      </filter>
  在applicationContext.xml的配置文件中需要替换C3P0链接池,改用druid的连接池。

      

<!-- 配置DRUID数据源 -->    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">        <property name="url" value="${jdbcUrl}"/>        <property name="username" value="${jdbcUsername}"/>        <property name="password" value="${jdbcPassword}"/>        <!-- 初始化连接大小 -->        <property name="initialSize" value="5"/>        <!-- 连接池最大使用连接数量 -->        <property name="maxActive" value="100"/>        <!-- 连接池最小空闲 -->        <property name="minIdle" value="3"/>        <!-- 获取连接最大等待时间 -->        <property name="maxWait" value="60000"/>        <!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->        <property name="validationQuery" value="${validationQuery}"/>        <property name="testOnBorrow" value="true"/>        <property name="testOnReturn" value="true"/>        <property name="testWhileIdle" value="true"/>        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->        <property name="timeBetweenEvictionRunsMillis" value="60000"/>        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->        <property name="minEvictableIdleTimeMillis" value="25200000"/>        <!-- 打开removeAbandoned功能 -->        <property name="removeAbandoned" value="false"/>        <!-- 1800秒,也就是30分钟 -->        <property name="removeAbandonedTimeout" value="1800"/>        <!-- 关闭abanded连接时输出错误日志 -->        <property name="logAbandoned" value="true"/>        <!-- 监控数据库 -->        <!-- <property name="filters" value="mergeStat" /> -->        <property name="filters" value="stat"/>    </bean>
  加了Druid我们链接数据库的配置文件也要修改

         

  这样,访问druid/index.html就能看见你想监控的数据了。

  Druid的JavaDoc文档请查看:点击打开链接。



原创粉丝点击