MySQL高级 - 案例 - AOP记录日志
自定义注解
通过自定义注解,来标示方法需不需要进行记录日志,如果该方法在访问时需要记录日志,则在该方法上标示该注解既可。
@Inherited
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OperateLog {
}
定义通知类
@Component
@Aspect
public class OperateAdvice {private static Logger log = Logger.getLogger(OperateAdvice.class);@Autowiredprivate OperationLogService operationLogService;@Around("execution(* cn.leon.controller.*.*(..)) && @annotation(operateLog)")public Object insertLogAround(ProceedingJoinPoint pjp , OperateLog operateLog) throws Throwable{System.out.println(" ************************ 记录日志 [start] ****************************** ");OperationLog op = new OperationLog();DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");op.setOperateTime(sdf.format(new Date()));op.setOperateUser(DataUtils.getRandStr(8));op.setOperateClass(pjp.getTarget().getClass().getName());op.setOperateMethod(pjp.getSignature().getName());//获取方法调用时传递的参数Object[] args = pjp.getArgs();op.setParamAndValue(Arrays.toString(args));long start_time = System.currentTimeMillis();//放行Object object = pjp.proceed();long end_time = System.currentTimeMillis();op.setCostTime(end_time - start_time);if(object != null){op.setReturnClass(object.getClass().getName());op.setReturnValue(object.toString());}else{op.setReturnClass("java.lang.Object");op.setParamAndValue("void");}log.error(JsonUtils.obj2JsonString(op));operationLogService.insert(op);System.out.println(" ************************** 记录日志 [end] *************************** ");return object;}}
方法上加注解
在需要记录日志的方法上加上注解@OperateLog。
@OperateLog
@RequestMapping("/insert")
public Result insert(@RequestBody Brand brand){try {brandService.insert(brand);return new Result(true,"操作成功");} catch (Exception e) {e.printStackTrace();return new Result(false,"操作失败");}
}
MySQL高级 - 案例 - AOP记录日志相关推荐
- MySQL高级 - 案例 - 系统性能优化 - 数据源配置
实现方式 db.properties jdbc.write.driver=com.mysql.jdbc.Driver jdbc.write.url=jdbc:mysql://192.168.142.1 ...
- MySQL高级 - 案例 - 系统性能优化 - 读写分离概述
性能优化 - 排序 在查询数据时,如果业务需求中需要我们对结果内容进行了排序处理 , 这个时候,我们还需要对排序的字段建立适当的索引, 来提高排序的效率 . 概述 在Mysql主从复制的基础上,可以使 ...
- MySQL高级 - 案例 - 系统性能优化 - 分页优化
优化count 创建一张表用来记录日志表的总数据量: create table log_counter(logcount bigint not null )engine = innodb defaul ...
- MySQL高级 - 案例 - 系统性能优化分析
系统中用户访问日志的数据量,随着时间的推移,这张表的数据量会越来越大,因此我们需要根据业务需求,来对日志查询模块的性能进行优化. 1) 分页查询优化 由于在进行日志查询时,是进行分页查询,那也就意味着 ...
- MySQL高级 - 案例 - 需求及环境准备
需求分析 在业务系统中,需要记录当前业务系统的访问日志,该访问日志包含:操作人,操作时间,访问类,访问方法,请求参数,请求结果,请求结果类型,请求时长 等信息.记录详细的系统访问日志,主要便于对系统中 ...
- MySQL高级 - 案例 - 系统性能优化 - 索引优化
性能优化 - 索引 当根据操作人进行查询时, 查询的效率很低,耗时比较长.原因就是因为在创建数据库表结构时,并没有针对于 操作人 字段建立索引. CREATE INDEX idx_user_metho ...
- 从前慢-Mysql高级及实战
Mysql高级及实战 1 Linux 系统安装MySQL 1.1 下载Linux 安装包 https://dev.mysql.com/downloads/mysql/5.7.html#download ...
- Mysql高级04_主从复制、日志
主从复制.日志 Mysql高级-day04 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1 ...
- Mysql高级-day04
Mysql高级-day04 1. MySql中常用工具 1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具. 语法 : mysql [options] [databas ...
最新文章
- springmvc前台String转后台Date
- 香港小學一年級入學考試題
- 腾讯物联网开发者社区平台Tencent Things Network发布 让IoT应用开发快速安全
- c语言怎么读取mhx文件内容,C语言重新学习――基础杂类
- 五邑大学计算机组成原理试卷,2017年五邑大学信息工程学院807微机原理与应用[专业硕士]之计算机组成原理考研强化模拟题...
- C#图解教程读书笔记(第3章 类型、存储及变量)
- bootstrap jasny fileinput插件冲突问题解决
- python下载bt文件_Python实现解析Bit Torrent种子文件内容的方法
- 树莓派控制台达伺服控制器
- 天翼网关 ddns设置_UCloud物理云网关百G级集群设计实践
- 五个方向告诉你如何运营好一个公众号!
- 移动端自动化测试appium(6)--搭建模拟器和真机环境
- 动态内存的申请和非动态内存的申请_深圳罗湖“限制非深户申请公办学位”惹争议,官方权威回应来了...
- 读《平凡的世界》读路遥笔下的秀莲
- EndNote 20
- 将excel内列表每行数据分别填充到另一个word模板里-批量生成同一模板下的不同文档,word邮件功能
- 七、BDB JE与BDB Java API
- glut linux 安装包,linux 下glut.h使用
- 同步交互与异步交互(简单易懂)
- 鸟人的Android揭秘(8)——搭建Android SDK开发环境(四)
热门文章
- VS2003转VS2010 fatal error C1189: #error
- 第8章 线性时间排序
- 使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试
- Visual C++位图操作(1)
- mysql四:数据操作
- [linux][MongoDB] mongodb学习(一):MongoDB安装、管理工具、
- ![CDATA[ ]]
- Android笔记之平移View
- 量子计算: 1秒完成传统计算机100年的任务量
- 【HRS项目】Axure兴许问题解决---与SVN结合