`

系统运行情况统计 通过AOP切面编程的方式监控请求与DAO交互的次数

    博客分类:
  • SSH
 
阅读更多

--监控com.zte..hibernate3impl.*Impl 这个包下面的所有文件的所有方法,配置了一个事物

<aop:advisor pointcut="execution(* com.zte..hibernate3impl.*Impl.*(..))" advice-ref="txAdvice" />

 

<bean id="dbCallMonitor" class="com.zte.frame.web.servlet.DbCallMonitor" />


<aop:config>
 <aop:pointcut id="around"
  expression="execution(* com.zte..hibernate3impl.*Impl.*(..))" />
 <aop:aspect ref="dbCallMonitor">
  <aop:around method="around" pointcut-ref="around" />  --这个around是对上面的around的引用
 </aop:aspect>
</aop:config>
<property name="proxyTargetClass" value="false" />

 

public class DbCallMonitor {

 protected final Logger log = Logger.getLogger(DbCallMonitor.class);

 public Object around(ProceedingJoinPoint pjp) throws Throwable {
  synchronized (this) {
   Class<?> targetClass = pjp.getTarget().getClass();
   MethodSignature sign = (MethodSignature) pjp.getSignature();
   String method = sign.getMethod().getName();
   String clazz = targetClass.getName();
   StopWatch stopWatch = new Log4JStopWatch(clazz + "."
     + method);
   // 构建数据入库
   Object obj = null;
   try {
    long begin = System.currentTimeMillis();
    obj = pjp.proceed();
    long end = System.currentTimeMillis();
    // 构建数据
    DbCallMonitorSingleton.getInstance().buildData(clazz, method, end - begin);
   } catch (Throwable ex) {
    log.error("DbCallMonitor Exception : ", ex);
    throw ex;
   }
   stopWatch.stop();
   return obj;
  }

 

 

// 将查询出的对象剔除事务,已确保不会被Hibernate事务自动更新
  if(null != d) {
   this.getSession().evict(d);
  } 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics