SpringBoot日志注解与缓存优化详解

 更新时间:2021年10月17日 14:57:56   作者:xbhog  
这篇文章主要给大家介绍了关于SpringBoot日志注解与缓存优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

日志注解:

关于SpringBoot中的日志处理,在之前的文章中页写过:

点击进入

这次通过注解+Aop的方式来实现日志的输出;

首先需要定义一个注解类:

 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 public @interface LogAnnotation {
     String module() default "";  //模块名
     String operation() default ""; //操作名
 }

然后定义切点:

 //定义切点
 @Pointcut("@annotation(com.xbhog.springbootvueblog.common.aop.LogAnnotation)")
 public void logPointCut() {
 }

白话文就是,注解所到之处都是切点;比较专业的解释的话可以自行百度或者Google;

有了切点,那么我们需要实现通知事件,这里采用了环绕通知,也就是前后都会增强。

 //环绕  处理流之前 和之后
 @Around("logPointCut()")
 public Object around(ProceedingJoinPoint point) throws Throwable {
     long beginTime = System.currentTimeMillis();
     //执行方法
     Object result = point.proceed();
     //执行时长(毫秒)
     long time = System.currentTimeMillis() - beginTime;
     //保存日志
     recordLog(point, time);
     return result;
 }

point.proceed()就是注解下所需要执行的方法;类似于下面代码段:

 @LogAnnotation(module = "listArticle", operation = "显示主页展示数据")
 public Result listArticle(@RequestBody PageParams pageParams) {
     return articleService.listArticle(pageParams);
 }

然后我们需要设置日志输出的信息(recordLog),这里我们通过反射来获得相应的类名和方法名以及其他信息等。

 private void recordLog(ProceedingJoinPoint joinPoint, long time) {
     MethodSignature signature = (MethodSignature) joinPoint.getSignature();
     Method method = signature.getMethod();
     LogAnnotation logAnnotation = method.getAnnotation(LogAnnotation.class);
     log.info("=====================log start================================");
     log.info("module:{}",logAnnotation.module());
     log.info("operation:{}",logAnnotation.operation());
 ​
     //请求的方法名
     String className = joinPoint.getTarget().getClass().getName();
     String methodName = signature.getName();
     log.info("request method:{}",className + "." + methodName + "()");
 ​
     //请求的参数
     Object[] args = joinPoint.getArgs();
     String params = JSON.toJSONString(args[0]);
     log.info("params:{}",params);
 ​
     //获取request 设置IP地址
     HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
     log.info("ip:{}", IpUtils.getIpAddr(request));
 ​
 ​
     log.info("excute time : {} ms",time);
     log.info("=====================log end================================");
 }

这样切点和切面已经完成了,使用的时候只需要在方法的上面直接加注解就可以获得对应的方法的日志信息,这样在上线的时候遇到报错直接就可以定位到了。

缓存的优化:

这个是在具体的项目中实现的,流程大体跟上面的实现类似,使用的也是注解实现的。

为什么需要使用缓存来提高网页内容的访问效率,因为内存的读取比硬盘读取的速度快的多的多,这样对用户的体验比较好,但是不是所有的数据都得放到缓存中,因为内存比磁盘贵的多,所以对哪些数据进行缓存能使得用户和服务器均衡也需要一定的经验。

Cache注解:

 @Target({ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 public @interface Cache {
     long expire() default 1 * 60 * 1000;  //存活时间
     String name() default "";  //缓存的名字
 }

这里设置了数据的存活时间和名字,使得数据在一定的时间里可以在内存中读取数据。

接下来看下缓存的AOP实现:

直接来看下环绕通知的处理流程:

根据图示,首先获取类名和调用的方法名,然后设置两个数组,一个保存参数类型一个保存参数。

遍历参数,将其转换成字符串,然后判断字符串参数(params)为不为空,不为空的话,加密当前字符串参数,将当前的加密的密码保存到Redis中,每次进入该切面的时候,需要判断RedisValue是否为空,如果为空的话,那么需要执行注解

下面的方法,如果不为空的话,直接从Redis中直接读取数据显示到前台上。

通过日志Aop与缓存Aop的功能操作,实现效果如下:

总结

到此这篇关于SpringBoot日志注解与缓存优化的文章就介绍到这了,更多相关SpringBoot日志注解与缓存优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • jxl 导出数据到excel的实例讲解

    jxl 导出数据到excel的实例讲解

    下面小编就为大家分享一篇jxl 导出数据到excel的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java环境变量的设置方法(图文教程)

    Java环境变量的设置方法(图文教程)

    想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的。
    2013-05-05
  • SpringBoot中使用Redis对接口进行限流的实现

    SpringBoot中使用Redis对接口进行限流的实现

    本文将结合实例代码,介绍SpringBoot中使用Redis对接口进行限流的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Spring的定时任务@Scheduled源码详解

    Spring的定时任务@Scheduled源码详解

    这篇文章主要介绍了Spring的定时任务@Scheduled源码详解,@Scheduled注解是包org.springframework.scheduling.annotation中的一个注解,主要是用来开启定时任务,本文提供了部分实现代码与思路,需要的朋友可以参考下
    2023-09-09
  • SpringBoot实现二维码扫码登录的原理及项目实践

    SpringBoot实现二维码扫码登录的原理及项目实践

    本文主要介绍了SpringBoot实现二维码扫码登录的原理及项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java实现格式化打印慢SQL日志的方法详解

    Java实现格式化打印慢SQL日志的方法详解

    不管我们使用何种语言开发,一旦程序发生异常,日志是一个很重要的数据,下面这篇文章主要给大家介绍了关于Java实现格式化打印慢SQL日志的相关资料,需要的朋友可以参考下
    2022-10-10
  • Java 实现微信和支付宝支付功能

    Java 实现微信和支付宝支付功能

    这篇文章主要介绍了Java 实现微信和支付宝支付功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 手把手搭建Java共享网盘的方法步骤

    手把手搭建Java共享网盘的方法步骤

    这篇文章主要介绍了手把手搭建Java共享网盘,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决Feign获取异常信息的处理方案

    解决Feign获取异常信息的处理方案

    这篇文章主要介绍了解决Feign获取异常信息的处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • formfile文件上传使用示例

    formfile文件上传使用示例

    这篇文章主要介绍了formfile文件上传使用示例,代码已加注释,需要的朋友可以参考下
    2014-03-03

最新评论