在springframework中,是否可以自动记录方法selective | all所花费的时间。自动我的意思是,我不想去每个方法并编写log.debug ( "....“);东西。
发布于 2009-09-30 05:54:04
AOP是您在这里所需要的。AOP允许您在不修改原始代码的情况下向应用程序添加代码。Spring AOP更喜欢使用代理对象来实现这一点。代理对象使用Decorator模式包装原始的Target对象并添加代码。代理被配置为实现原始目标对象的一个或多个接口。
这里,为了给应用程序计时,我们的想法是使用PerformanceMonitorInterceptor,这是Spring Framework附带的性能监视类之一。
第一个选项是使用Spring类ProxyFactoryBean来创建Spring AOP代理对象。为此,请执行以下操作:
Advisor Advisor定义原始bean日志级别定义PerformanceMonitorInterceptor
RegexpMethodPointcutAdvisor
ProxyFactoryBean
PerformanceMonitorInterceptor的日志级别设置为Advisor下面是演示这些步骤的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从Spring2.0开始,还有另一个选择:使用Spring 2.0 XML Schema-based configuration和Spring2.0的AspectJ style pointcut expressions。使用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>发布于 2014-07-04 02:24:40
你可以看看stagemonitor。它是一个开源的java web应用程序性能监视器。它捕获响应时间指标、JVM指标、请求细节(包括由请求分析器捕获的调用堆栈)等。开销非常低。
您还可以选择使用强大的timeseries数据库石墨来存储数据点的长期历史记录,您可以使用花哨的仪表板查看这些数据点。
示例截图:

请查看project website以查看更多屏幕截图、功能描述和文档。
注:我是stagemonitor的开发者
发布于 2009-09-30 07:23:45
最后我想出了怎么做。
首先看一下'Pascal Thivent‘的帖子,它对我帮助很大。在更改您的log4j.properties并创建timingAdvisor之后,您必须将此adviser绑定到您希望启用调试的类。你必须像这样修改你的代码。
早期代码:
<bean id="myTableDao" class="com.xyz.sc.db.dao.MyTableDaoImpl" parent="commonDataSource" >
<property name="anotherDao" ref="anotherDao"/>
</bean>新代码。
<bean id="myTableDaoTarget" class="com.xyz.sc.db.dao.MyTableDaoImpl" parent="commonDataSource" >
<property name="anotherDao" ref="anotherDao"/>
</bean>
<bean id="myTableDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.xyz.sc.db.dao.MyTableDao</value>
</property>
<property name="target"><ref local="myTableDaoTarget"/></property>
<property name="interceptorNames">
<list>
<value>timingAdvisor</value>
</list>
</property>
</bean>https://stackoverflow.com/questions/1496205
复制相似问题