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

因为项目中使用了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. 代码神器Atom,最常用的几大插件,你值得拥有。

    作者:魔洁 atom常用插件 atom插件安装File>Settings>intall搜索框输入插件名,点击Packages搜索,搜索出来后点击intall安装,建议你先安装(simpli ...

  2. Azure机器学习入门(三)创建Azure机器学习实验

    在此动手实践中,我们将在Azure机器学习Studio中一步步地开发预测分析模型,首先我们从UCI机器学习库的链接下载普查收入数据集的样本并开始动手实践: http://archive.ics.uci ...

  3. 基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象

    在讲述服务注册与引用的随笔中,有提到context.getServiceReferences()方法,通过该方法可以获取到OSGI框架容器中的指定类型的服务引用,从而获取到对应的服务对象.同时该方法还 ...

  4. ionic-cordova 支付宝支付插件cordova-plugin-alipay-v2使用篇

    支付宝WS_APP_PAY_SDK_BASE_2.0 <APP支付> 支付宝的cordova插件其实在github上已经有很多了,但是都已经是以前的版本了.在2016年11月的时候支付宝进 ...

  5. 如何让 Git 忽略掉文件中的特定行内容?

    近期在git遇到几个问题,让我重新认识到git的强大性,下面列出来记录一下 有一个数据库的配置文件,在用 git add 添加到 index file 时不能透露了相关配置.而如果用 .gitigno ...

  6. Java三大修饰符

    1.static 修饰: 修饰属性:类变量,全类共有 修饰方法:静态方法,静态方法中不能直接访问非静态的方法和属性 静态方法只能被静态方法覆盖,并且没有多态 静态的方法或者属性不依赖于对象:类名.方法 ...

  7. DataAdapter&&DataSet 帮助理解小程序

    // 2105/07/08 // DataAdapter&&DataSet using System; using System.Collections.Generic; using ...

  8. ArcGIS许可启动问题

    前段时间,由于360常常删除重要文件终于发生在我身上.不得已换了电脑管家,清理后再次打开License Server Administrator时,发现启动项怎么也点不动了.而打开服务管理器,却发现A ...

  9. 关于C语言中变量类型转换

    今天在工作中遇到一个问题,而在解决问题的过程中,发现一段关于int 型变量(a)和char型(b)变量间类型转换的代码存在问题:一个值为255的int型变量a,强制类型转换并赋值给char型变量b后, ...

  10. 谈 jquery中.band() .live() .delegate() .on()的区别

    bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 $("a").bind("click",function(){alert(& ...