利用spring AOP原理 实现 DAO层SQL的监控,辅助开发

公司项目大部分采用SpringMVC +Spring-JDBC框架来搭建web项目,每次需要分析代码的SQL的时候,都需要将代码打上断点,运行程序,定位到SQL,然后粘到对应的查询工具上进行查询,查询期间还要手动替换 上查询参数。这种做法做多了,令人生厌,所以利用AOP原理,写一个SQL调试管理小功能。

以下为项目dao层的简单接口定义:
public interface BaseDao {

public List<List<String>> queryListData(String sql, Object[] o);

public List<List<String>> queryListDataNoParams(String sql);

public List queryList(String sql, Object[] o);

public <T> List<T> queryObjList(String sql, Object[] args, Class<T> clazz);

public int queryForInt(String sql, Object[] o);

public int addOrUpdate(String sql, Object[] o);

}

可以发现传参比较简单,基本都是传入sql,以及一些sql参数,我们只需要拦截到这些要执行的方法,通过JAVA反射拿到对应的参数,进行控制台输出就好了。但是仅仅输出了sql还不够,我们还需要显示的知道这个方法的调用过程。这里通过Java线程来获取方法运行栈的信息。对比看了下具有sql监控的淘宝数据源druid,其实现逻辑大体上也是运用了AOP的原理进行SQL的监控。

废话不少说直接上代码:
1)自定义一个方法拦截器 DisplayExecuteSqlInterceptor :

package com.XXX.CCC.aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Method;

/**
 *
 * 方法拦截  粒度在方法上
 *
 * @desc 调试管理 利用 AOP 原理, 在开发模式下于控制台展示 dao层 的实际执行的SQL
 * 粘出来即可 在pl/sql下执行,已经替换掉 ? 了
 *
 * @author luotianyi
 * @create 2017-11-30 14:03
 **/
public class DisplayExecuteSqlInterceptor implements MethodInterceptor {
   

    private static final Logger log = LoggerFactory.getLogger(DisplayExecuteSqlInterceptor.class);

    private 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值