`
ZHENFENGSHISAN
  • 浏览: 69932 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
7e6e47ee-161c-3be5-bd41-0eb274ec4d0e
Spring+Spring...
浏览量:35416
31792615-da99-349b-8109-bbf420058c1d
Spring+Spring...
浏览量:25051
社区版块
存档分类
最新评论

Spring+SpringMVC+MyBatis+easyUI整合优化篇(十一)数据层优化-druid监控及慢sql记录

阅读更多

本文提要

前文也提到过druid不仅仅是一个连接池技术,因此在将整合druid到项目中后,这一篇文章将去介绍druid的其他特性和功能,作为一个辅助工具帮助提升项目的性能,本文的重点就是两个字:监控。
我的github地址点这里

druid监控

因为已经做了整合,所以这一步较为简单,只需要在web.xml中做一下简单的Servlet配置即可。

<!--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.xml中配置的账号和密码即可进入监控后台,注意,配置的账号和密码是明文,你在这里配置什么就是什么,并没有经过加密。
druid简述信息

OK,我们看到系统的一些简述信息,当然,你也应该看到启动时间了,没错,我就是在下班后9点多才开始写这篇博客的。

接下来是比较重要的一个页面,SQL监控
SQL监控

从这个页面里我们能看到网站从启动开始执行的sql语句统计,每一条语句的执行次数、执行时间之和、最慢执行时间、执行错误数等等多个统计指标,通过这个统计数据我们可以找出sql语句的执行规律及sql语句的不足之处,也可以通过错误数来定位程序的不足并及时修改。

在配置druid数据源时,做了如下配置,开启了druid防火墙。

 <property name="filters" value="wall,stat"/>

因此在控制后台也能见到SQL防火墙面板,如下图所示:
SQL防火墙

面板里是防御统计及sql的统计信息,这里用的是druid默认的一些过滤规则,并没有自定义复杂的防火墙规则,因此也不细说了。

但是再去点击其他几个页面的时候,发现页面中都是空数据,因为并没有开启druid相关的功能。这是比较粗糙些的做法,不用做其他配置,就是默认的filters配置加上Servlet配置,虽然也有监控和统计,但是并不是特别满足需求。

开启慢sql监控

在SQL监控中,有一项关于sql执行最慢执行时间的统计,但是只有一个值,就是一条sql语句最慢的执行时间记录,其他执行时间是看不到的,只能通过总时间来进行粗略的估计,还有一个问题就是,一旦项目重启,这些记录就全都没了,因此制定对应的日志输出策略是极其必要的。
大致想法就是通过druid获取所有项目运行中的慢sql执行记录,并将这些数据输出到日志文件中,查了一下druid的资料,调试了一段时间,最终成功实现。

1、修改数据源配置,增加拦截器:

 <property name="proxyFilters">
            <list>
                <ref bean="stat-filter"/>
                <ref bean="log-filter"/>
            </list>
        </property>

2、配置慢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>

3、修改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毫秒的都会被红色标注。
慢sql标红

再去tomcat日志文件夹中查看日志文件,可以看到日志文件中已经存在配置的慢sql日志文件了,点击查看其中也已经有了慢sql记录的数据,慢sql以及这条sql语句执行的时间都有记录。
慢sql日志

开启spring监控

在监控面板中看到有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监控页面,已经有了数据:
spring监控

原先的做法只能对sql语句及jdbc相关操作进行监控,无法监控到代码级别的运行,因此进一步设置,结合spring的AOP特性对代码的运行效果进行监控,druid可以做到方法级别的监控,这个功能可以让你发现方法的调用频率及方法的运行时间,及时做出调整和修正使得项目更健壮。

结语

因为我想对网站的一些信息和运行情况进行监控,因此在代码中集成了druid的相关功能,也上传到了github仓库,如果你不需要的话,可以根据我在代码里写的注释删除相关配置文件即可。

1
4
分享到:
评论

相关推荐

    Spring Boot+Apache Shiro+Spring MVC+MyBatis+Quartz+Druid DEMO

    Spring Boot+Apache Shiro+Spring MVC+MyBatis+Quartz+Druid DEMO

    Blog:基于Springmvc + MyBatis + Spring + Bootstrap + EasyUI + Mysql的个人博客系统项目

    基于Springmvc + MyBatis + Spring + Bootstrap + EasyUI + Mysql的个人博客系统项目源码 欢迎访问我的CSDN: : 项目介绍 使用Maven3 + Spring4 + Springmvc + Mybatis3架构;数据库使用Mysql,数据库连接池使用...

    JAVA制造装备物联及生产管理(ERP)系统源码

    Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP JSTL JavaScript kindeditor富文本编辑器,处理图片上传和富文本编辑 项目框架: 后台框架:spring+ springMVC + shiro + MyBatis + ...

    blog:基于Springmvc + MyBatis + Spring + Bootstrap + EasyUI + Mysql的个人博客系统项目

    基于Springmvc + MyBatis + Spring + Bootstrap + EasyUI + Mysql的个人博客系统项目源码 欢迎访问我的CSDN: : 项目介绍 使用Maven3 + Spring4 + Springmvc + Mybatis3架构;数据库使用Mysql,数据库连接池使用...

    erp源码-ssm+easyUI+mysql+maven+shiro

    erp项目 基于ssm+easyUI+mysql+maven+shiro开发 本系统实现目标如下: ## 项目技术架构(Spring+SpringMVC+Mybatis) ## - Maven - Spring(IOC DI AOP 声明式事务处理) - SpringMVC(支持Restful风格) - Hibernate...

    erp完整源码-ssm+easyUI+mysql+maven+shiro

    erp项目 基于ssm+easyUI+mysql+maven+shiro开发 本系统实现目标如下: ## 项目技术架构(Spring+SpringMVC+Mybatis) ## - Maven - Spring(IOC DI AOP 声明式事务处理) - SpringMVC(支持Restful风格) - Hibernate...

    MF00331-JAVA制造装备物联生产管理(ERP)源码.zip

    Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP JSTL JavaScript kindeditor富文本编辑器,处理图片上传和富文本编辑 项目框架: 后台框架:spring+ springMVC + shiro + MyBatis + jsp 前台...

    新零售ERP部署包

    新零售ERP,架构层(Spring+SpringMVC+Mybatis+ easyUI+JBPM+redis+dubbo+druid+Maven)

    qh-erp-ssm

    erp项目 基于ssm+easyUI+...- [Druid(数据源配置 sql防注入 sql性能监控)](http://wosyingjun.iteye.com/blog/2306139) - 统一的异常处理 - JSP JSTL JavaScript - kindeditor富文本编辑器,处理图片上传和富文本编辑

    java ssm开发的生产管理ERP系统

    这是一个生产管理ERP系统。依托科技计划重点项目“制造装备...- [Druid(数据源配置 sql防注入 sql性能监控)] - 统一的异常处理 - JSP JSTL JavaScript - kindeditor富文本编辑器,处理图片上传和富文本编辑&lt;!--more--&gt;

    基于SSM框架的生产管理ERP系统源码+数据库+项目文档,含计划进度、设备管理、工艺监控、物料监控、人员监控、质量监控、系统管理

    一个生产管理ERP系统。主要包括:计划进度、设备管理、工艺监控、物料监控、...Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP JSTL JavaScript kindeditor富文本编辑器,处理图片上传和富文本编辑

    基于Java(SSM)+Bootstrap+EasyUI+Mysql的个人博客系统【100013308】

    使用Maven3+Spring4+Springmvc+Mybatis3架构;数据库使用Mysql,数据库连接池使用阿里巴巴的Druid; 使用Bootstrap3 UI框架实现博客的分页显示,博客分类,文章归类显示;完成用户评论和分享功能; 使用EasyUI实现...

    博客系统-就业项目 java

    使用Spring4+Springmvc+Mybatis3架构,采用Mysql数据库;使用Maven3管理项目,使用Shiro作为项目安全框架,使用Lucene作为全文检索,支持restful风格;前台网页使用主流的Bootstrap3 UI框架;后台管理使用主流易用的...

    基于SSM框架的博客系统源码

    使用 Spring4+Springmvc+Mybatis3 架构, 采用 Mysql 数据库; 使用 Maven3 管理项目,使用 Shiro 作为项目安全框架,使用 Lucene 作为全文检索,支持 restful 风格; 前台网页使用主流的 Bootstrap3 UI 框架;后台...

    一个可以直接运行的基于SpringMVC的web框架1.1.12

    工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...

    单点登录源码

    Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 &gt; zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`...

    基于SSM的个人博客+源代码+文档说明

    使用Spring5+SpringMVC+Mybatis3架构 采用Mysql数据库 使用Maven管理项目 使用Shiro作为项目安全框架 使用Lucene作为全文检索,支持restful风格 前台网页使用主流的Bootstrap3 UI框架 后台管理使用主流易用的EasyUI...

    基于Spring MVC的web框架 1.1.11

    工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...

    可以直接运行的基于SpringMVC的web框架示例,也可以直接当公司框架

    工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...

    博客系统(搜索利用Lucene)

    使用Spring4+SpringMVC+MyBatis3架构 采用mysql数据库 使用Maven3管理项目,使用Shiro作为项目安全框架,使用Lucene作为全文检索,支持restful风格; 前台网页使用主流的BootStrap3 UI框架;后台管理使用主流易用的...

Global site tag (gtag.js) - Google Analytics