前文也提到过druid不只仅是一个链接池技术,所以在将整合druid到项目中后,这一篇文章将去介绍druid的其余特性和功能,做为一个辅助工具帮助提高项目的性能,本文的重点就是两个字:监控。
个人github地址点这里git
由于已经作了整合,因此这一步较为简单,只须要在web.xml中作一下简单的Servlet配置便可。github
<!--druid监控页面 --> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> <init-param> <!-- 不容许清空统计数据 --> <param-name>resetEnable</param-name> <param-value>false</param-value> </init-param> <init-param> <!-- 用户名 --> <param-name>loginUsername</param-name> <param-value>yourname</param-value> </init-param> <init-param> <!-- 密码 --> <param-name>loginPassword</param-name> <param-value>yourpassword</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <!--druid监控页面 -->
从新构建工程并启动tomcat,在浏览器中输入druid便可进入到druid监控面板的登陆页面。
web
输入在web.xml中配置的帐号和密码便可进入监控后台,注意,配置的帐号和密码是明文,你在这里配置什么就是什么,并无通过加密。
spring
OK,咱们看到系统的一些简述信息,固然,你也应该看到启动时间了,没错,我就是在下班后9点多才开始写这篇博客的。sql
接下来是比较重要的一个页面,SQL监控
apache
从这个页面里咱们能看到网站从启动开始执行的sql语句统计,每一条语句的执行次数、执行时间之和、最慢执行时间、执行错误数等等多个统计指标,经过这个统计数据咱们能够找出sql语句的执行规律及sql语句的不足之处,也能够经过错误数来定位程序的不足并及时修改。浏览器
在配置druid数据源时,作了以下配置,开启了druid防火墙。tomcat
<property name="filters" value="wall,stat"/>
所以在控制后台也能见到SQL防火墙面板,以下图所示:
app
面板里是防护统计及sql的统计信息,这里用的是druid默认的一些过滤规则,并无自定义复杂的防火墙规则,所以也不细说了。maven
可是再去点击其余几个页面的时候,发现页面中都是空数据,由于并无开启druid相关的功能。这是比较粗糙些的作法,不用作其余配置,就是默认的filters配置加上Servlet配置,虽然也有监控和统计,可是并非特别知足需求。
在SQL监控中,有一项关于sql执行最慢执行时间的统计,可是只有一个值,就是一条sql语句最慢的执行时间记录,其余执行时间是看不到的,只能经过总时间来进行粗略的估计,还有一个问题就是,一旦项目重启,这些记录就全都没了,所以制定对应的日志输出策略是极其必要的。
大体想法就是经过druid获取全部项目运行中的慢sql执行记录,并将这些数据输出到日志文件中,查了一下druid的资料,调试了一段时间,最终成功实现。
一、修改数据源配置,增长拦截器:
<property name="proxyFilters"> <list> <ref bean="stat-filter"/> <ref bean="log-filter"/> </list> </property>
二、配置慢sql及日志拦截器:
<!-- 慢SQL记录 --> <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter"> <!-- 慢sql时间设置,即执行时间大于200毫秒的都是慢sql --> <property name="slowSqlMillis" value="200"/> <property name="logSlowSql" value="true"/> </bean> <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter"> <property name="dataSourceLogEnabled" value="true" /> <property name="statementExecutableSqlLogEnable" value="true" /> </bean>
三、修改log4j配置文件,增长慢sql日志的输出策略:
log4j.rootLogger=DEBUG,debug,druid # Druid log4j.logger.druid.sql=WARN,druid log4j.logger.druid.sql.DataSource=WARN,druid log4j.logger.druid.sql.Connection=WARN,druid log4j.logger.druid.sql.Statement=WARN,druid log4j.appender.druid=org.apache.log4j.DailyRollingFileAppender log4j.appender.druid.layout=org.apache.log4j.PatternLayout log4j.appender.druid.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n log4j.appender.druid.datePattern='.'yyyy-MM-dd log4j.appender.druid.Threshold = WARN log4j.appender.druid.append=true log4j.appender.druid.File=${catalina.home}/logs/ssm-maven/druid-slow-sql.log
重启再去查看druid监控后台,能够看到跟原来有了一些差异,因为设置了慢sql的时间为大于200毫秒,因此执行时间大于200毫秒的都会被红色标注。
再去tomcat日志文件夹中查看日志文件,能够看到日志文件中已经存在配置的慢sql日志文件了,点击查看其中也已经有了慢sql记录的数据,慢sql以及这条sql语句执行的时间都有记录。
在监控面板中看到有spring监控这个功能,可是因为没有进行配置,因此功能不能用,查了一下druid的文档,最终开启了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.ssm.maven.core.service.*</value> <value>com.ssm.maven.core.dao.*</value> </list> </property> </bean> <aop:config> <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/> </aop:config>
再次查看spring监控页面,已经有了数据:
原先的作法只能对sql语句及jdbc相关操做进行监控,没法监控到代码级别的运行,所以进一步设置,结合spring的AOP特性对代码的运行效果进行监控,druid能够作到方法级别的监控,这个功能可让你发现方法的调用频率及方法的运行时间,及时作出调整和修正使得项目更健壮。
由于我想对网站的一些信息和运行状况进行监控,所以在代码中集成了druid的相关功能,也上传到了github仓库,若是你不须要的话,能够根据我在代码里写的注释删除相关配置文件便可。