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

--监控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);
  } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值