最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

日志注解:

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

點擊進入

這次通過注解+Aop的方式來實現(xiàn)日志的輸出;

首先需要定義一個注解類:

 @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() {
 }

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

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

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

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

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

然后我們需要設(shè)置日志輸出的信息(recordLog),這里我們通過反射來獲得相應(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());
 ​
     //請求的方法名
     String className = joinPoint.getTarget().getClass().getName();
     String methodName = signature.getName();
     log.info("request method:{}",className + "." + methodName + "()");
 ​
     //請求的參數(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================================");
 }

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

緩存的優(yōu)化:

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

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

Cache注解:

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

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

接下來看下緩存的AOP實現(xiàn):

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Java實現(xiàn)lucene搜索功能的方法(推薦)

    Java實現(xiàn)lucene搜索功能的方法(推薦)

    下面小編就為大家?guī)硪黄狫ava實現(xiàn)lucene搜索功能的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 一篇文章教你如何用Java自定義一個參數(shù)校驗器

    一篇文章教你如何用Java自定義一個參數(shù)校驗器

    這篇文章主要介紹了使用java自定義一個參數(shù)校驗器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)
    2021-09-09
  • 基于Jasypt對SpringBoot配置文件加密

    基于Jasypt對SpringBoot配置文件加密

    這篇文章主要介紹了基于Jasypt對SpringBoot配置文件加密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • mybatis in查詢傳入String方式

    mybatis in查詢傳入String方式

    這篇文章主要介紹了mybatis in查詢傳入String方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring Boot webflux使用方法解析

    Spring Boot webflux使用方法解析

    這篇文章主要介紹了Spring Boot webflux使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • JAVA?OOM內(nèi)存溢出問題深入解析

    JAVA?OOM內(nèi)存溢出問題深入解析

    這篇文章主要為大家介紹了JAVA?OOM內(nèi)存溢出問題深入解析,在生產(chǎn)環(huán)境搶修中,我們經(jīng)常會碰到應(yīng)用系統(tǒng)java內(nèi)存OOM的情況,這個問題非常常見,今天我們就這個問題來深入學(xué)習(xí)探討一下
    2023-10-10
  • Java中StringBuilder常用構(gòu)造方法解析

    Java中StringBuilder常用構(gòu)造方法解析

    這篇文章主要介紹了Java中StringBuilder常用構(gòu)造方法解析,StringBuilder是一個可標的字符串類,我們可以吧它看成是一個容器這里的可變指的是StringBuilder對象中的內(nèi)容是可變的,需要的朋友可以參考下
    2024-01-01
  • JAVA基礎(chǔ)類庫之String類,StringBuffer類和StringBuilder類

    JAVA基礎(chǔ)類庫之String類,StringBuffer類和StringBuilder類

    這篇文章主要介紹了Java中基礎(chǔ)類庫的String類,StringBuffer類和StringBuilder類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2021-09-09
  • elasticsearch索引index數(shù)據(jù)功能源碼示例

    elasticsearch索引index數(shù)據(jù)功能源碼示例

    這篇文章主要為大家介紹了elasticsearch索引index功能源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Java算法之最長公共子序列問題(LCS)實例分析

    Java算法之最長公共子序列問題(LCS)實例分析

    這篇文章主要介紹了Java算法之最長公共子序列問題(LCS),結(jié)合實例形式分析了最長公共子序列的原理及問題解決方法,需要的朋友可以參考下
    2017-11-11

最新評論

安吉县| 高雄县| 连山| 塔河县| 崇明县| 邹平县| 铜山县| 黔西县| 岳西县| 新密市| 普陀区| 会昌县| 西吉县| 福州市| 邛崃市| 富平县| 陕西省| 砚山县| 自贡市| 灵璧县| 通化县| 宁晋县| 太仆寺旗| 徐汇区| 合山市| 镇远县| 邓州市| 昌乐县| 丽江市| 岗巴县| 牙克石市| 丘北县| 宾川县| 泌阳县| 汝南县| 旅游| 瑞金市| 广宗县| 城口县| 汤阴县| 龙江县|