想向各位朋友们咨询一个问题。
最近需要实现一个通用aop功能用来拦截在业务方法执行过程,抓取到每一个执行的sql,以及sql操作影响的数据前后的值的变化,还有操作人和请求ip等记录信息然后保存到数据库mysql当中。但是有的方法执行过程当中执行了很多sql不好抓取解析,而且要拦截的方法分散在各个controller有的需要拦截,有的不需要,需要具体到敏感的方法上。哪个朋友有方案吗,能否给一个。🙏
你的需求用插入触发器实现应该更好。
可以针对 DAO层的方法,加上自定义注解,然后用自定义切面来拦截包含自定义注解的方法
类似下面我这种定义:
可以利用Mysql的触发器自定义功能,完成AOP日志记录.
mysql触发器即 triggers ,它是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
CREATE
[DEFINER = user]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }
trigger_order: { FOLLOWS | PRECEDES } other_trigger_name