SpringBoot使⽤AOP记录请求⽇志和异常⽇志本⽂基础WEB环境使⽤SpringBoot及Spring-Data-Jpa构建
关于SpringBoot及JPA⽤法本⽂不再过多讨论,下⾯是引⼊的jar:
起步依赖
web及aop依赖
jpa依赖
mysql驱动
本⽂着重AOP的使⽤,你也可以使⽤⾃⼰构建的环境
1. 由于本⽂中使⽤的JPA,因此⾸先创建保存⽇志及保存异常的实体类,如果你使⽤的是Mybatis,则需要⾸先创建表然后根据表来逆
向⽣成实体类
保存⽇志的实体类:
⽇志实体
保存异常的实体类:
异常实体
1. 接下来我们定义⼀个Operation注解,⽤于声明在⽅法上描述此⽅法执⾏了什么操作:
操作注解
@Target 声明这是⼀个⾃定义注解类,ElementType.METHOD 表明此注解可声明在⽅法上
@Retention 声明注解保留期限,RetentionPolicy.RUNTIME 表明此注解可保留⾄运⾏时,可以通过反射获取注解信息
1. 然后编写⼀个AOP切⾯类,由于使⽤的SpringBoot只要保证在Application⼦⽬录之下就被会⾃动扫描,所以只需要注解声明即可,
并不需要额外配置
请求切⾯
@Aspect 声明这是⼀个切⾯类
@Compoent 此类交由Spring容器管理
1. 定义请求⽇志切⼊点:
切⼊点
@PointCut 定义请求⽇志切⼊点,其切⼊点表达式有多种匹配⽅式,详细请⾃⾏参阅资料,此处切⼊点为所有声明@Operation注解的⽅法
1. 编写⽅法的前置通知:
前置通知
前置通知在执⾏⽬标⽅法之前执⾏
在前置通知中设置请求⽇志信息,如开始时间,请求参数,注解内容等
可以直接获取注解内的信息
1. 编写⽅法的返回通知:
返回通知
返回通知,在⽬标⽅法正常结束之后执⾏
在返回通知中补充请求⽇志信息,如返回时间,⽅法耗时,返回值,并且保存⽇志信息
1. 编写⽅法的异常通知:
异常通知
异常通知,在⽬标⽅法⾮正常结束,发⽣异常或者抛出异常时执⾏
在异常通知中设置异常信息,并将其保存
1. Spring AOP 共计五种通知,由于本⽂中只需要三种,其它两种只做简单介绍,如有兴趣请⾃⾏查阅资料
后置通知:在⽬标⽅法执⾏之后执⾏,与返回通知不同的是此通知⽆法拿到返回值,并且不管是否发⽣异常都会执⾏
环绕通知:围绕动态代理的全过程,需要携带ProceedingJoinPoint参数,并且必须有返回值,且ProceedingJoinPoint类型的参数可以决定是否执⾏⽬标⽅法
1. 在前置通知中设置请求⽇志信息的⼯具类:
获取请求IP
获取请求IP
获取请求⽅式
获取请求⽅式
获取切⼊点的参数信息
获取切⼊点的参数信息
获取切⼊点的参数信息
1. 编写⼀个简易Controoler,⽤于测试请求⽇志记录:
测试请求⽇志
启动SpringBoot之后,访问测试请求⽇志的URL,查看请求⽇志表记录,可以看到⽇志已成功记录:
请求成功
请求⽇志表记录
接下来把测试请求⽇志的Controoler修改为抛出⼀个异常,测试异常记录:
测试异常⽇志
然后重新启动SpringBoot,再次访问刚才的URL,可以看到产⽣了异常:
springboot aop请求异常
再次查看请求⽇志表,发现还是⼀条记录,说明异常通知执⾏后并不会执⾏返回通知,这正是我们期望的结果:
请求⽇志记录
然后我们再查看异常记录表,发现已经将异常记录:
异常⽇志
⾄此,SpringBoot AOP记录请求⽇志和异常⽇志完成

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。