前言:
每天都在成长着,经历着。而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的拦截 -->在applicationContext.xml的配置文件中需要替换C3P0链接池,改用druid的连接池。
<init-param>
<param-name>excludedPages</param-name>
<param-value>/druid*</param-value>
</init-param>
</filter>
加了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/index.html就能看见你想监控的数据了。
Druid的JavaDoc文档请查看:点击打开链接。