前言 在SpringBoot中使用自定义注解.aop切面打印web请求日志.主要是想把controller的每个request请求日志收集起来,调用接口.执行时间.返回值这几个重要的信息存储到数据库里,然后可以使用火焰图统计接口调用时长,平均响应时长,以便于我们对接口的调用和执行情况及时掌握. 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo…
最后一个方法:核心的日志记录方法 package com.migu.cm.aspect; import com.alibaba.fastjson.JSON; import com.migu.cm.domain.UserOperationLog; import com.migu.cm.service.UserOperationLogService; import com.migu.cm.utils.Slf4jLogUtil; import com.migu.cm.utils.ThreadLocal…
在前面的Part3中, 我介绍Policy Injection模块中内置的Call Handler的使用方法,今天则继续介绍Call Handler——Custom Call Handler,通过建立Custom Call Handler来实现项目中的用户操作日志的记录,具体的代码可以在项目中EntLib.Helper项目下找到,如下图: 本文将从Custom Call Handler两种方式来介绍:Attribute方式和Configuration方式. 一.核心代码 建立Custom Cal…
网上搜索发现,实现用户操作日志的方式有:自定义注解方式.Hibernate拦截器方式.Hibernate监听器方式等. 1.自定义注解方式较为麻烦,需要进行操作记录的方法均需要添加注解,但是相对的操作描述更为针对性,缺点是无法获得所操作的实体ID以及成员: 2.拦截器方式经我自己试验,拦截器是在Hibernate操作数据库之前执行的,所以同样获取不了所操作的实体ID和成员,但是相对注解方式来说,不用在原有代码上更改添加注解等,耦合性比较低. 使用拦截器需要保证数据库操作均是对实体类的操作,即使用…
我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下. 需求分析 系统需要对用户的操作进行记录,方便未来溯源 首先想到的就是在每个方法中,去实现记录的逻辑,但是这样做肯定是不现实的,首先工作量大,其次违背了软件工程设计原则(开闭原则) 这种需求显然是对代码进行增强,首先想到的是使用 SpringBoot 提供的 AOP 结合注解的方式来实现 功能实现 1. 需要一张记录日志的 Log 表 导出的 sql 如下: -- mcam…
SpringBoot自定义注解实现多数据源 前置学习 需要了解 注解.Aop.SpringBoot整合Mybatis的使用. 数据准备 基础项目代码:https://gitee.com/J_look/spring-boot-all-demo 数据库SQL 项目中有提供,修改基本信息即可 行动起来 添加依赖 利用 AOP 可以实现对某些代码的解耦,不需要硬编码编写. <dependency> <groupId>org.springframework.boot</groupId&…
最近忙于学车,抽时间将Nop的一些公用模块添加进来,反应的一些小问题也做了修复.另外有园友指出Nop内存消耗大,作为一个开源电商项目,性能方面不是该团队首要考虑的,开发容易,稳定,代码结构清晰简洁也是很重要的一个方面,另外性能的优化也不仅仅是在框架层面.笔者在使用其开发一些中小型的项目,性能还在可以接受范围.前篇——基于nopCommerce的开发框架(附源码):http://www.cnblogs.com/dreling/p/6906688.html. 最新的代码已经同布到GitHub:htt…
项目已经开发完成,需要加用户操作日志,如果返回去加也不太现实,所以使用springAOP来完成比较合适. 注解工具类: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface LogAnnotation { String operateModelNm() default ""; String operateFuncNm() default ""; String…
SPRINGBOOT自定义注解 在springboot中,有各种各样的注解,这些注解能够简化我们的配置,提高开发效率.一般来说,springboot提供的注解已经佷丰富了,但如果我们想针对某个特定情景来添加注解,就可以使用自定义注解. 自定义注解的步骤 实现这个自定义注解一般主要有以下几个步骤. maven导入相关的依赖 声明注解 注解的具体实现 使用注解的实例 在phyweb项目中的应用 之所以会想到这个自定义注解,是因为我们在给用户发送邮件这个模块中,用户如果提交了请求,提交按钮被禁用,这个…
传统的项目开发中业务流程以串行方式,执行了模块1—>模块2–>模块3 而我们知道,这个执行流程其实对于整个程序来讲是有一定的弊端的,主要有几点: (1)整个流程的执行响应等待时间比较长; (2)如果某一个模块发生异常,可能会影响其他 模块甚至整个系统的执行流程与结果; (3)程序的代码上造成冗余,模块与模块需要进行强通信以及数据的交互,出现问题时难以定位与维护.耦合度过高! 因此需要进行优化,将强关联的业务模块解耦以及某些模块之间实行异步通信! 下面我将通过一些实际案例来进行一个介绍 一.异步…