千家信息网

SpringBoot日志注解与缓存优化的示例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关SpringBoot日志注解与缓存优化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。日志注解:这次通过注解+Aop的方式来实现
千家信息网最后更新 2026年11月03日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日志注解与缓存优化的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

注解 缓存 日志 方法 数据 参数 切点 信息 内存 字符 字符串 时候 时间 篇文章 面的 示例 分析 内容 名字 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 湖南永感互联网科技有限公司 江苏根荣互联网科技 中国互联网科技工作委员会毛军 互联网为科技 易互联网科技有限公司 深圳互联网络科技有限公司 深圳天众互联网科技公司 佰商互联网科技有限公司 互联网科技公司招聘 北京三清互联网科技 成都互联网科技公司100强 现代互联网科技股 互联网金融中的现代科技 互联网与医疗科技 广州市恰铎互联网科技有限公司 风投北京互联网科技 图游互联网科技 张家口科技产业互联网平台 互联网大会出现的黑科技 成都仁贤领冠互联网科技有限公司 广州优美互联网科技 上海宁丞科技互联网 中国互联网公司排名锤子科技 上海互联网科技公司ppt 互联网科技融合创新 广西泛欧互联网科技有限公司 互联网领先科技成果宣传视频 平安好医生打造互联网科技医疗 恒生互联网科技趋势
0