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日志注解与缓存优化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot-注解-操作日志的实现方式

    此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 bean 使用方式 基本使用 maven依赖添加SDK依赖 <dependency> <groupId>io.github.mouzt</groupId> <artifactId>bizlog-sdk</artifactId> <version>

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

    目录 日志注解: 缓存的优化: 总结 日志注解: 关于SpringBoot中的日志处理,在之前的文章中页写过: 点击进入 这次通过注解+Aop的方式来实现日志的输出: 首先需要定义一个注解类:  @Target(ElementType.METHOD)  @Retention(RetentionPolicy.RUNTIME)  @Documented  public @interface LogAnnotation {      String module() default "";  

  • SpringBoot自定义Redis实现缓存序列化详解

    目录 1.自定义RedisTemplate 1.1.Redis API默认序列化机制 1.2.自定义RedisTemplate序列化机制 1.3.效果测试 2.自定义RedisCacheManager 2.1.Redis注解默认序列化机制 2.2.自定义RedisCacheManager 刚刚完成了Spring Boot整合Redis进行了数据的缓存管理,但缓存管理的实体类数据使用的是JDK序列化方式,不便于使用可视化管理工具进行查看和管理. 接下来分别针对基于注解的Redis缓存实现和基于AP

  • SpringBoot中注解@AliasFor的使用详解

    目录 简介 用法1:注解的属性互为别名 简介 实例 用法2.继承父注解的属性,不重写属性名 简介 代码 用法3:继承父注解的属性,并重写属性名 简介 代码 简介 本文用示例介绍@AliasFor(别名)注解的用法. 用法1:注解的属性互为别名 简介 它可以注解到自定义注解的两个属性上,表示这两个互为别名,也就是说这两个属性其实同一个含义. 其中一个属性名必须是"value" 无论指明设置哪个属性名设置属性值,另一个属性名也是同样属性值,也可以缺省属性名. 若两个都指明属性值,要求值必须

  • springboot日志切面通用类实例详解

    1.pom.xml文件导入AOP依赖 <!--aop依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.3.0.RELEASE</version> </dependency> 2.pom.xml导入Lombo

  • SpringBoot Application注解原理及代码详解

    1.SpringBoot 启动main() @SpringBootApplication public class TomcatdebugApplication { public static void main(String[] args) { SpringApplication.run(TomcatdebugApplication.class, args); } } 1.1 @SpringBootApplication 注解,其实主要是@ComponentScan,@EnableAutoCo

  • spring cache注解@Cacheable缓存穿透详解

    目录 具体注解是这样的 基于这个思路我把Cache的实现改造了一下 取缓存的get方法实现 测试了一下,发现ok了 最近发现线上监控有个SQL调用量很大,但是方法的调用量不是很大,查看接口实现,发现接口是做了缓存操作的,使用Spring cache缓存注解结合tair实现缓存操作. 但是为啥SQL调用量这么大,难道缓存没有生效.测试发现缓存是正常的,分析了代码发现,代码存在缓存穿透的风险. 具体注解是这样的 @Cacheable(value = "storeDeliveryCoverage&qu

  • SpringBoot整合Web之AOP配置详解

    目录 配置AOP AOP简介 Spring Boot 支持 其它 自定义欢迎页 自定义 favicon 除去某个自动配置 配置AOP AOP简介 要介绍面向切面变成(Aspect-Oriented Programming,AOP),需要先考虑一个这样的场景:公司有一个人力资源管理系统目前已经上线,但是系统运行不稳定,有时运行的很慢,为了检测到底是哪个环节出现问题了,开发人员想要监控每一个方法执行的时间,再根据这些执行时间判断出问题所在.当问题解决后,再把这些监控移除掉.系统目前已经运行,如果手动

  • spring缓存代码详解

    本文研究的主要是spring缓存的相关内容,具体介绍如下. 这篇文章是根据谷歌翻译大致修改出来的,由于原文不知道是什么语,所以可能导致翻译的有错误和不准确的地方,但是大致的方向感觉还是蛮不错的,所以在这里整理了一下,希望能够有所帮助. 高速缓存一直是一个非常需要这两个提高应用程序性能并降低其工作量.此外,它的用处今天是特别明显,可以作出处理成千上万的游客concurrents.D'un架构上的Web应用,高速缓存管理正交于应用程序的业务逻辑和出于这个原因,应该对应用程序本身的发展产生的影响最小.

  • 使用SpringBoot整合ssm项目的实例详解

    SpringBoot是什么? Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程. Spring Boot 现在已经成为 Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成.成为 SpringBoot 全家桶,成为一把万能钥匙. SpringBoot的特点 1.创建独立的 Spring 应用程序 2.嵌入的 Tomcat ,无需部署 WAR 文件 3.简化 Maven 配置 4.自动配置 Spr

  • PHP中关于php.ini参数优化详解

    PHP引擎php.ini参数优化 无论是apache还是nginx,php.ini都是适合的.而php-fpm.conf适合nginx+fcgi的配置 首先选择产品环境的php.ini(php.ini-production) /home/oldboy/tools/php-5.3.27/php.ini-development /home/oldboy/tools/php-5.3.27/php.ini-production 1.打开php的安全模式 php的安全模式是个非常重要的php内嵌的安全机制

随机推荐