当前位置: 首页 > 面试题库 >

如何记录Springframework中方法花费的时间?

督弘化
2023-03-14
问题内容

是否有可能在springframework中记录方法所花费的时间?全部]自动。我的意思是,我不想进入每种方法并编写log.debug(“ ....”);
东西。


问题答案:

AOP是您在这里需要的。AOP允许您将代码添加到您的应用程序,而无需修改原始代码。Spring AOP倾向于使用 Proxy 对象来完成此任务。
代理 对象使用装饰器模式包装原始 Target 对象并添加代码。所述 代理 被配置为实现原始的一个或多个接口 的目标 对象。

在这里,为应用程序计时的想法是使用PerformanceMonitorInterceptorSpring框架附带的性能监视类之一。

第一种选择是使用Spring类ProxyFactoryBean创建Spring AOP 代理 对象。去做这个:

  • 定义您的 原始bean
  • 定义一个PerformanceMonitorInterceptor
  • 定义一个RegexpMethodPointcutAdvisor
  • 定义一个ProxyFactoryBean代理原始bean并应用 Advisor
  • 将日志级别设置PerformanceMonitorInterceptorTRACE

在Spring配置下面说明了这些步骤:

<beans>
  <bean id="MyServiceTarget" class="org.myapp.services.MyService">
    <property ... />
  </bean>

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

  <bean id="timingAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice" ref="timingLogger"/>
    <property name="patterns">
      <list>
        <value>.*</value>
      </list>
    </property>
  </bean>

  <bean id="MyService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
      <value>org.myapp.services.MyService</value>
    </property>
    <property name="target"><ref local="MyServiceTarget"/></property>
    <property name="interceptorNames">
      <list>
        <value>timingAdvisor</value>
      </list>
    </property>
  </bean>
</beans>

以及日志级别的配置PerformanceMonitorInterceptor

log4j.logger.org.springframework.aop.interceptor.PerformanceMonitorInterceptor=TRACE

从Spring 2.0开始,还有另一个选择:使用基于Spring 2.0 XML
Schema的配置
和Spring的AspectJ样式切入点表达式。使用,ProxyFactoryBean您必须显式声明要代理的接口。使用<aop:config><aop:advisor>标记,您可以自动代理Bean容器中每个对象的每个接口。

<beans "add xsd declarations here" >
  <bean id="MyService" class="org.myapp.services.MyService">
    <property ... />
  </bean>

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

  <aop:config>
    <aop:advisor pointcut="execution(* org.myapp.services.MyService.*(..))"
      advice-ref="timingAdvice"/>
  </aop:config>
</beans>


 类似资料:
  • 我正在使用Spring Boot编写一个web Rest web服务。

  • 这是配置jetty日志的后续问题。有没有什么属性可以给出请求所花费的时间? 123.4.5.6---[27/Aug/2004:10:16:17 0000]“GET/jetty/tut/XmlConfiguration.html HTTP/1.1”200 76793”http://localhost:8080/jetty/tut/logging.html“Mozilla/5.0(X11;U;Linu

  • 问题内容: 我想衡量用户在网页上花费的时间(以秒为单位,以整数为单位,以浮点数表示,以分钟为单位)。我知道有一个卸载事件,当他们离开页面时,我可以触发该事件。但是如何获得他们已经在那里度过的时间呢? 问题答案: 如果您使用Google Analytics(分析),他们会提供此统计信息,尽管我不确定他们是如何获得的。 如果要自己滚动,则需要将一些AJAX请求发送到服务器进行日志记录。 jQuery有

  • 本文向大家介绍MongoDB如何查询耗时记录的方法详解,包括了MongoDB如何查询耗时记录的方法详解的使用技巧和注意事项,需要的朋友参考一下 准备 在此之前,我们先在我们的数据库中插入10万条数据。数据的格式是这样的: explain explain方法是用来查看db.collecion.find()的一些查询信息的。例如: explain方法有个可选的参数verbose,是个字符串,他表示的是

  • 问题内容: 如何使用Python的文档字符串使用参数记录方法? 编辑: PEP 257给出了这个例子: 这是大多数Python开发人员使用的约定吗? 我期待一些更正式的东西,例如 环境 :Python 2.7.1 问题答案: 根据我的经验,numpy的文档字符串公约(PEP257超集)是最广泛的传播 遵循 惯例,它们也通过工具,如支持的狮身人面像。 一个例子:

  • 我注意到在 Spark 中的规则探索器每次催化剂更改计划时都会执行跟踪日志: https://github . com/Apache/spark/blob/78801881 c 405 de 47 f 7 e 53 EEA 3 e 0420 DD 69593 DBD/SQL/catalyst/src/main/Scala/org/Apache/spark/SQL/catalyst/rules/ru