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

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
分享到:
评论

相关推荐

    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)

    ssm+easyui+druid连接池+echarts

    SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,它将Spring的核心容器、Spring的Web MVC模块以及MyBatis持久层框架整合在一起,为开发者提供了强大的服务。在这个小例子中,SSM框架与EasyUI、...

    ssm+druid连接池+easyui+ztree的小例子

    SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,用于构建高效、可维护的Web应用程序。在这个小例子中,我们将深入理解这三个组件如何协同工作,并结合Druid连接池和EasyUI、ZTree实现数据管理...

    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制造装备物联及生产管理(ERP)系统源码数据库 MySQL源码类型 WebForm

    JAVA制造装备物联及生产管理(ERP)系统源码 这是一个制造装备物联生产管理ERP系统。依托科技计划重点项目“制造装备物联...Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP JSTL JavaScript kindedit

    博客系统-就业项目 java

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

    框架ssm整合

    &lt;artifactId&gt;mybatis-spring &lt;version&gt;2.0.6 &lt;!-- 数据源 --&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;druid &lt;version&gt;1.2.7 &lt;!-- MySQL驱动 --&gt; &lt;groupId&gt;mysql &lt;artifactId&gt;mysql-connector...

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

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

    ssm框架,十分精简,欢迎联系

    SSM框架是由Spring、SpringMVC和MyBatis三个开源项目整合而成的Java Web开发框架。这个框架在Java开发领域中被广泛使用,因为它能够有效地解耦应用的业务逻辑层、数据访问层以及视图展示层,提高了开发效率并降低了...

    单点登录源码

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

    一个可以直接运行的基于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...

Global site tag (gtag.js) - Google Analytics