Задача классическая - подсчитать какие методы, сколько времени выполняются, и при этом не особо уродуя функциональный код. То есть зафиксировать время перед началом выполнения метода, затем время после выполнения метода, посчитать и куда-нибудь записать разницу.
Мне не хотелось выдумывать велосипед, поэтому я воспользовался простой библиотекой JAMon, где решение этой задачи выглядит тривиально :
Без spring-а (это когда не всё создаётся через IoC) :
Monitor mon = MonitorFactory.start("myMethod");
try {
myMethod();
} finally {
mon.stop();
}
System.out.println(MonitorFactory.getReport());
В отчёте (в виде строки с html-таблицей) будет видно количество вызовов метода, общее время, среднее , минимальное, максимальное и т.п. Для каждого значения в методе start() будут отдельные счётчики.
Теперь как это выглядит с использованием spring-aop :
В коде ничего не добавляем (только место где выводим результаты), а в конфиге пишем следующее :
<bean id="jamonPerformanceMonitorInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor" >
<property name="trackAllInvocations" value="true"></property>
<property name="useDynamicLogger" value="true"></property>
</bean>
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<idref bean="jamonPerformanceMonitorInterceptor"/>
</list>
</property>
<property name="beanNames">
<list>
<value>idBean1</value>
<value>idBean2</value>
</list>
</property>
</bean>
Всё. После этого все вызовы наших зарегистрированных бинов idBean1 и idBean2 будут фиксироваться JAMon, и как и в первом случае доступ к этим данным можно получить через MonitorFactory.getReport() (или другие полезные методы этой фабрики)
P.S.: Я использую для ряда объектов прокси CGLIB. При попытке подключить aop-аннотации, я получал ошибки, а в xml-конфигурации выше, всё отрабтало отлично. Впрочем, полагаю, что я просто что-то не докрутил с аннотациями.
P.P.S.: springframework 3.0.5(http://www.springsource.org/), JAMon 2.7(http://jamonapi.sourceforge.net/)
Мне не хотелось выдумывать велосипед, поэтому я воспользовался простой библиотекой JAMon, где решение этой задачи выглядит тривиально :
Без spring-а (это когда не всё создаётся через IoC) :
Monitor mon = MonitorFactory.start("myMethod");
try {
myMethod();
} finally {
mon.stop();
}
System.out.println(MonitorFactory.getReport());
В отчёте (в виде строки с html-таблицей) будет видно количество вызовов метода, общее время, среднее , минимальное, максимальное и т.п. Для каждого значения в методе start() будут отдельные счётчики.
Теперь как это выглядит с использованием spring-aop :
В коде ничего не добавляем (только место где выводим результаты), а в конфиге пишем следующее :
<bean id="jamonPerformanceMonitorInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor" >
<property name="trackAllInvocations" value="true"></property>
<property name="useDynamicLogger" value="true"></property>
</bean>
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<idref bean="jamonPerformanceMonitorInterceptor"/>
</list>
</property>
<property name="beanNames">
<list>
<value>idBean1</value>
<value>idBean2</value>
</list>
</property>
</bean>
Всё. После этого все вызовы наших зарегистрированных бинов idBean1 и idBean2 будут фиксироваться JAMon, и как и в первом случае доступ к этим данным можно получить через MonitorFactory.getReport() (или другие полезные методы этой фабрики)
P.S.: Я использую для ряда объектов прокси CGLIB. При попытке подключить aop-аннотации, я получал ошибки, а в xml-конфигурации выше, всё отрабтало отлично. Впрочем, полагаю, что я просто что-то не докрутил с аннотациями.
P.P.S.: springframework 3.0.5(http://www.springsource.org/), JAMon 2.7(http://jamonapi.sourceforge.net/)
Комментариев нет:
Отправить комментарий