欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot日志注解與緩存優(yōu)化詳解

 更新時(shí)間:2021年10月17日 14:57:56   作者:xbhog  
這篇文章主要給大家介紹了關(guān)于SpringBoot日志注解與緩存優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

日志注解:

關(guān)于SpringBoot中的日志處理,在之前的文章中頁(yè)寫(xiě)過(guò):

點(diǎn)擊進(jìn)入

這次通過(guò)注解+Aop的方式來(lái)實(shí)現(xiàn)日志的輸出;

首先需要定義一個(gè)注解類:

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

然后定義切點(diǎn):

 //定義切點(diǎn)
 @Pointcut("@annotation(com.xbhog.springbootvueblog.common.aop.LogAnnotation)")
 public void logPointCut() {
 }

白話文就是,注解所到之處都是切點(diǎn);比較專業(yè)的解釋的話可以自行百度或者Google;

有了切點(diǎn),那么我們需要實(shí)現(xiàn)通知事件,這里采用了環(huán)繞通知,也就是前后都會(huì)增強(qiáng)。

 //環(huán)繞  處理流之前 和之后
 @Around("logPointCut()")
 public Object around(ProceedingJoinPoint point) throws Throwable {
     long beginTime = System.currentTimeMillis();
     //執(zhí)行方法
     Object result = point.proceed();
     //執(zhí)行時(shí)長(zhǎng)(毫秒)
     long time = System.currentTimeMillis() - beginTime;
     //保存日志
     recordLog(point, time);
     return result;
 }

point.proceed()就是注解下所需要執(zhí)行的方法;類似于下面代碼段:

 @LogAnnotation(module = "listArticle", operation = "顯示主頁(yè)展示數(shù)據(jù)")
 public Result listArticle(@RequestBody PageParams pageParams) {
     return articleService.listArticle(pageParams);
 }

然后我們需要設(shè)置日志輸出的信息(recordLog),這里我們通過(guò)反射來(lái)獲得相應(yīng)的類名和方法名以及其他信息等。

 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());
 ​
     //請(qǐng)求的方法名
     String className = joinPoint.getTarget().getClass().getName();
     String methodName = signature.getName();
     log.info("request method:{}",className + "." + methodName + "()");
 ​
     //請(qǐng)求的參數(shù)
     Object[] args = joinPoint.getArgs();
     String params = JSON.toJSONString(args[0]);
     log.info("params:{}",params);
 ​
     //獲取request 設(shè)置IP地址
     HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
     log.info("ip:{}", IpUtils.getIpAddr(request));
 ​
 ​
     log.info("excute time : {} ms",time);
     log.info("=====================log end================================");
 }

這樣切點(diǎn)和切面已經(jīng)完成了,使用的時(shí)候只需要在方法的上面直接加注解就可以獲得對(duì)應(yīng)的方法的日志信息,這樣在上線的時(shí)候遇到報(bào)錯(cuò)直接就可以定位到了。

緩存的優(yōu)化:

這個(gè)是在具體的項(xiàng)目中實(shí)現(xiàn)的,流程大體跟上面的實(shí)現(xiàn)類似,使用的也是注解實(shí)現(xiàn)的。

為什么需要使用緩存來(lái)提高網(wǎng)頁(yè)內(nèi)容的訪問(wèn)效率,因?yàn)閮?nèi)存的讀取比硬盤讀取的速度快的多的多,這樣對(duì)用戶的體驗(yàn)比較好,但是不是所有的數(shù)據(jù)都得放到緩存中,因?yàn)閮?nèi)存比磁盤貴的多,所以對(duì)哪些數(shù)據(jù)進(jìn)行緩存能使得用戶和服務(wù)器均衡也需要一定的經(jīng)驗(yàn)。

Cache注解:

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

這里設(shè)置了數(shù)據(jù)的存活時(shí)間和名字,使得數(shù)據(jù)在一定的時(shí)間里可以在內(nèi)存中讀取數(shù)據(jù)。

接下來(lái)看下緩存的AOP實(shí)現(xiàn):

直接來(lái)看下環(huán)繞通知的處理流程:

根據(jù)圖示,首先獲取類名和調(diào)用的方法名,然后設(shè)置兩個(gè)數(shù)組,一個(gè)保存參數(shù)類型一個(gè)保存參數(shù)。

遍歷參數(shù),將其轉(zhuǎn)換成字符串,然后判斷字符串參數(shù)(params)為不為空,不為空的話,加密當(dāng)前字符串參數(shù),將當(dāng)前的加密的密碼保存到Redis中,每次進(jìn)入該切面的時(shí)候,需要判斷RedisValue是否為空,如果為空的話,那么需要執(zhí)行注解

下面的方法,如果不為空的話,直接從Redis中直接讀取數(shù)據(jù)顯示到前臺(tái)上。

通過(guò)日志Aop與緩存Aop的功能操作,實(shí)現(xiàn)效果如下:

總結(jié)

到此這篇關(guān)于SpringBoot日志注解與緩存優(yōu)化的文章就介紹到這了,更多相關(guān)SpringBoot日志注解與緩存優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入學(xué)習(xí)java內(nèi)存化和函數(shù)式協(xié)同

    深入學(xué)習(xí)java內(nèi)存化和函數(shù)式協(xié)同

    這篇文章主要介紹了深入學(xué)習(xí)java內(nèi)存化和函數(shù)式協(xié)同,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • Java動(dòng)態(tài)規(guī)劃之編輯距離問(wèn)題示例代碼

    Java動(dòng)態(tài)規(guī)劃之編輯距離問(wèn)題示例代碼

    這篇文章主要介紹了Java動(dòng)態(tài)規(guī)劃之編輯距離問(wèn)題示例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java集合之CopyOnWriteArrayList源碼解析

    java集合之CopyOnWriteArrayList源碼解析

    這篇文章主要介紹了java集合之CopyOnWriteArrayList源碼解析,容器array是volatile修飾的,即set和get方法都是線程安全的,整個(gè)添加過(guò)程上了鎖,所以整體是通過(guò)volatile和lock來(lái)保證的線程安全,需要的朋友可以參考下
    2023-12-12
  • java之項(xiàng)目運(yùn)維手冊(cè)

    java之項(xiàng)目運(yùn)維手冊(cè)

    這篇文章主要介紹了java之項(xiàng)目運(yùn)維手冊(cè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 使用profiles進(jìn)行多環(huán)境配置的代碼實(shí)現(xiàn)

    使用profiles進(jìn)行多環(huán)境配置的代碼實(shí)現(xiàn)

    在項(xiàng)目開(kāi)發(fā)的過(guò)程中會(huì)用到多個(gè)環(huán)境,為了便于開(kāi)發(fā)使用,通常需要使用profiles進(jìn)行多環(huán)境配置,所以本文給大家介紹了使用profiles進(jìn)行多環(huán)境配置的代碼實(shí)現(xiàn),需要的朋友可以參考下
    2024-02-02
  • Mybatis Limit實(shí)現(xiàn)分頁(yè)功能

    Mybatis Limit實(shí)現(xiàn)分頁(yè)功能

    這篇文章主要介紹了Mybatis Limit實(shí)現(xiàn)分頁(yè)功能,使用Limit實(shí)現(xiàn)分頁(yè)可以減少數(shù)據(jù)的處理量,本文通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下
    2021-04-04
  • Java基礎(chǔ)之FastJson詳解

    Java基礎(chǔ)之FastJson詳解

    今天給大家復(fù)習(xí)Java基礎(chǔ)FastJson,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Spring和Hibernate的整合操作示例

    Spring和Hibernate的整合操作示例

    這篇文章主要介紹了Spring和Hibernate的整合操作,結(jié)合實(shí)例形式詳細(xì)分析了Spring和Hibernate的整合具體步驟、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Java阻塞隊(duì)列中的BlockingQueue接口詳解

    Java阻塞隊(duì)列中的BlockingQueue接口詳解

    這篇文章主要介紹了Java阻塞隊(duì)列中的BlockingQueue接口詳解,對(duì)于Queue而言,BlockingQueue是主要的線程安全的版本,具有阻塞功能,可以允許添加、刪除元素被阻塞,直到成功為止,BlockingQueue相對(duì)于Queue而言增加了兩個(gè)方法put、take元素,需要的朋友可以參考下
    2023-09-09
  • SpringBoot加入Guava Cache實(shí)現(xiàn)本地緩存代碼實(shí)例

    SpringBoot加入Guava Cache實(shí)現(xiàn)本地緩存代碼實(shí)例

    這篇文章主要介紹了SpringBoot加入Guava Cache實(shí)現(xiàn)本地緩存代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論