J'ai eu une question de la part d'un client qui souhaite mesurer les temps de réponse de certaines méthodes dans une moulinette de calcul d'échéance de prêts bancaire, développé en Java.
Heureusement, le batch exploite le framework Spring.
Le travail devient alors assez simple,
combiner les intercepteurs de Spring et ses capacités AOP (Aspect Programming).
Il s'agit de mesurer, par exemple, les temps de réponses de toutes les méthodes qui réalisent des calculs et qui
commencer par prépare les « outils » de mesure, il s'agit du ben offert par Spring : le PerformanceMonitorInterceptor
<bean id="performanceInterceptor" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor"/>
|
il s'agit d'un Advice, dans le jargon AOP
Ensuite, associer cet Advice à un pattern particulier : ici toutes les méthodes de type .*calcul.*
<bean id="performanceAdvisor" class=
"org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice" ref="performanceInterceptor"/> <property name="patterns"> <list> <value>.*calcul*.*value> list> property> bean> |
L'étape suivante, consiste en la transformation du bean service en Taget dans l'optique de l'exposer indirectement à travers le ProxyFactoryBean de Spring.
<bean id="calculEcheanceServiceTarget" class="com.netprogress.spring.perf.CalculEcheanceServiceImpl"> <property name="echeanceDao" ref="echeanceDao"/> bean>
<bean id="echeanceDao" class="com.netprogress.spring.perf.EcheanceDaoImpl"> bean>
|
<bean id="calculEcheanceService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.netprogress.spring.perf.CalculEcheanceServicevalue> property> <property name="target"> <ref bean="calculEcheanceServiceTarget"/> property> <property name="interceptorNames"> <list> <value>performanceAdvisorvalue> list> property> bean> |
Une fois ce fichier Spring terminé,
vérifier que votre fichier log4j.properties présente la ligne suivante
… log4j.logger.org.springframework.aop.interceptor. PerformanceMonitorInterceptor=TRACE ….
|
Lancer l'exécution :
[2009-01-05 23:19:44,406] DEBUG : org.springframework.aop.interceptor.PerformanceMonitorInterceptor. invokeUnderTrace (PerformanceMonitorInterceptor.java:63) - StopWatch 'com.netprogress.spring.perf.CalculEcheanceService.getCalculEcheance' : running time (millis) = 16 |
Ne pas oublier de supprimer cette configuration en production
autre facçon de faire :
<bean id="performanceInterceptor" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" />
- <aop:config>
<aop:advisor pointcut="execution(* com.netprogress..*.*(..))" advice-ref="performanceInterceptor" />
</aop:config>
0 commentaires :
Enregistrer un commentaire