前段时间对公司产品做性能优化,如果单依赖于测试,进度就会很慢。所以就通过对代码的方式来完成,并以此来加快项目进度。具体的执行方案自然就是要知道各个业务执行时间,针对业务来进行优化。

因为项目中使用了Spring,那自然的就想到要通过 Spring interceptor来完成这个事,然后就查了一下spring-aop.jar里,已有了多个trace,monitor相关的interceptor了。然后逐个看了一下,有一个PerformanceMonitorInterceptor,能够满足需求。就直接将其引入到项目中,以供性能优化之用。

下面就贴出来我的相关配置:

1、添加一个applicationContext-performace.xml文件,加入Interceptor,并配置好相关的 拦截ponitcut:

<bean id="xxxPerformance" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor"> </bean>

<aop:config>
        <aop:advisor pointcut="execution(* org.springframework.jdbc.core.JdbcTemplate.*(..))" advice-ref="xxxPerformance" />

        <!-- 你项目中业务实现包 -->
        <aop:advisor pointcut="execution(* com.your.project.service.impl.*.*(..))" advice-ref="xxxPerformance" />
</aop:config>

2、  然后配置 log4j.xml,让其打到日志文件中和CLI:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.EnhancedPatternLayout">
              <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}:%L) %m%n">
      </layout>
</appender>

<appender name="sql-appender" class="org.apache.log4j.RollingFileAppender">
      <param name="file" value="${WAS_INSTALL_HOME}/your/logs/directory/xxx-sql.log" />
      <param name="Append" value="true" />
      <param name="MaxFileSize" value="100MB" />
      <param name="MaxBackupIndex" value="10" />

      <layout class="org.apache.log4j.EnhancedPatternLayout">
              <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}:%L) %m%n">
      </layout>
</appender>

<!--SQL : log your sql used JdbcTemplate-->
<logger name="org.springframework.jdbc.core.JdbcTemplate" additivity="false">
        <level value="DEBUG" />
        <appender-ref="console"/>
        <appender-ref="sql-appender"/>
</logger>

<!--mybatis mapper: log your sql used mybatis-->
<logger name="your.mapper.directory" additivity="false">
        <level value="DEBUG" />
        <appender-ref="console"/>
        <appender-ref="sql-appender"/>
</logger>

<!--Performance -->
<logger name="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" additivity="false">
        <level value="TRACE" />
        <appender-ref="console"/>
        <appender-ref="sql-appender"/>
</logger>

注意:

上面红色背景的内容是需要替换成你的项目中的相关包名或者目录。

Spring:利用PerformanceMonitorInterceptor来协助应用性能优化的更多相关文章

  1. [python]用profile协助程序性能优化

    转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanph ...

  2. 用profile协助程序性能优化

     程序运行慢的原因有很多,比如存在太多的劣化代码(如在程序中存在大量的“.”操作符),但真正的原因往往是比较是一两段设计并不那么良好的不起眼的程序,比如对一序列元素进行自定义的类型转换等.因为程序性能 ...

  3. Spring Cloud Feign 使用方法与性能优化

    1. feign自定义Configuration和root 容器有效隔离. 用@Configuration注解 不能在主@ComponentScan (or @SpringBootApplicatio ...

  4. Atitit 如何利用先有索引项进行查询性能优化

    Atitit 如何利用先有索引项进行查询性能优化 1.1. 再分析的话就是我们所写的查询条件,其实大部分情况也无非以下几种:1 1.2. 范围查找 动态索引查找1 1.2.1. 索引联合 所谓的索引联 ...

  5. Spring Boot 性能优化

    spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...

  6. Spring/Hibernate 应用性能优化的7种方法

    对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能.此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法.本文系 O ...

  7. 利用 gperftools 对nginx mysql 内存管理 性能优化

    利用 gperftools 对nginx 与 mysql  进行 内存管理  性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...

  8. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  9. java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘

    15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...

随机推荐

  1. JS闭包深入理解(理解篇)

    看书的时候很是不明白为啥变量老是五,经过认真思考的出一下理解: function box() {   var arr = [];   for (var i = 0; i < 5; i++) {  ...

  2. linux之sed的常用操作

    Sed命令: sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(patter ...

  3. java Socket(TCP)编程小项目

    package 服务器端相关操作; import java.io.Serializable; /* * 创建存储需要传输信息的对象,方便客户端向服务器端传送数据 */ public class Cli ...

  4. asp.net core mvc实现伪静态功能

    在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理的话,肯定会给 ...

  5. Pro Git CN Plus

    Git — The stupid content tracker, 傻瓜内容跟踪器.Linus 是这样给我们介绍 Git 的. Git 是用于 Linux 内核开发的版本控制工具.与常用的版本控制工具 ...

  6. 由于java.util.Arrays.asList(...)导致的异常

    前言: Collections.toArray()与Arrays.asList() 是Java API提供的友好的相互转换工具,日常开发中用于列表和数组之间的转换非常方便,但今天测试时,发现一下隐藏的 ...

  7. 【转】Spring源码编译

    原文地址: http://www.flyoung.me/2013/08/02/springcodecompile/ 参考资料: https://github.com/spring-projects/s ...

  8. JSP中三种弹出对话框的用法《转》

    对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...

  9. MJRefresh在UITableView中的使用

    前言 MJRefresh是一个好用的上下拉刷新的控件,github地址如下:https://github.com/CoderMJLee/MJRefresh 很多app都使用这个控件,我们也来了解一下它 ...

  10. 2017-3-2 C#基础 集合

    要使用集合必须先引用命名空间,using System.Collections; 集合与数组的不同: 数组:同一类型,固定长度集合:不同类型,不固定长度 集合主要分为六大类:普通集合,泛型集合,哈希表 ...