激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 利用Spring AOP記錄方法的執行時間

利用Spring AOP記錄方法的執行時間

2020-06-17 12:34daisy JAVA教程

這篇文章給大家介紹的是spring的aop來實現方法級的執行時間的記錄監控,以此來評估方法的性能以及針對性的對已存在的方法進行優化。對于監控,我們比較關注監控的可靠性和性能,準確,高效,這才能在不影響整體性能的情況

一、前言

對于spring aop這個我就不多介紹了,網上一搜一大把,使用過spring的人都知道spring的ioc和aop。ioc我們常用,但在我們自己的系統中,aop的使用幾乎為零,除了這個監控的小功能應用到了,其他的基本上沒有使用到。下面小編就給大家整理下利用Spring AOP記錄方法執行時間的解決方案,有需要的一起看看吧。

二、解決方案

1、傳統方法

最簡單、粗暴的方法是給各個需要統計的方法開始和結尾處加的時間戳,然后差值計算結果即可,代碼如下:

?
1
2
3
4
5
6
long startTime = System.currentTimeMillis();
 
// 業務代碼
 
long endTime = System.currentTimeMillis();
System.out.println("程序運行時間:" + (endTime - startTime) + "ms"); //輸出程序運行時間

這樣的方式需要給很多統計方法都加上耗時時間的代碼,這些代碼與核心業務無關卻大量重復、分散在各處,維護起來也困難。

2、面向切面編程的方法

所以,不推薦使用上面壞味道的代碼。想了很久,打算利用Spring AOP的思想來完成這個功能,話不多說代碼和相關的解釋如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
 
/**
 * 檢測方法執行耗時的spring切面類
 * 使用@Aspect注解的類,Spring將會把它當作一個特殊的Bean(一個切面),也就是不對這個類本身進行動態代理
 * @author blinkfox
 * @date 2016-07-04
 */
@Aspect
@Component
public class TimeInterceptor {
 
 private static Log logger = LogFactory.getLog(TimeInterceptor.class);
 
 // 一分鐘,即1000ms
 private static final long ONE_MINUTE = 1000;
 
 // service層的統計耗時切面,類型必須為final String類型的,注解里要使用的變量只能是靜態常量類型的
 public static final String POINT = "execution (* com.blinkfox.test.service.impl.*.*(..))";
 
 /**
  * 統計方法執行耗時Around環繞通知
  * @param joinPoint
  * @return
  */
 @Around(POINT)
 public Object timeAround(ProceedingJoinPoint joinPoint) {
  // 定義返回對象、得到方法需要的參數
  Object obj = null;
  Object[] args = joinPoint.getArgs();
  long startTime = System.currentTimeMillis();
 
  try {
   obj = joinPoint.proceed(args);
  } catch (Throwable e) {
   logger.error("統計某方法執行耗時環繞通知出錯", e);
  }
 
  // 獲取執行的方法名
  long endTime = System.currentTimeMillis();
  MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  String methodName = signature.getDeclaringTypeName() + "." + signature.getName();
 
  // 打印耗時的信息
  this.printExecTime(methodName, startTime, endTime);
 
  return obj;
 }
 
 /**
  * 打印方法執行耗時的信息,如果超過了一定的時間,才打印
  * @param methodName
  * @param startTime
  * @param endTime
  */
 private void printExecTime(String methodName, long startTime, long endTime) {
  long diffTime = endTime - startTime;
  if (diffTime > ONE_MINUTE) {
   logger.warn("-----" + methodName + " 方法執行耗時:" + diffTime + " ms");
  }
 }
 
}

注意:最后還需要在applicationContext.xml文件中加上AOP需要的配置<aop:aspectj-autoproxy/>,這樣Spring才能識別到它。

總結

以上就是關于利用Spring AOP記錄方法執行時間的全部內容,希望這篇文章的內容對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人一区二区三区电影 | 91久久久久久久一区二区 | 色婷婷综合久久久中字幕精品久久 | 国产91丝袜在线熟 | 免费在线观看毛片视频 | 欧洲精品久久久久69精品 | 黄色片免费在线 | 日韩剧情片 | 可以免费看av | 黄色网电影 | 日韩a毛片免费观看 | 久久福利精品 | 国产精品一区在线免费观看 | 精品国产观看 | 久久亚洲精选 | 久久综合一区 | 99视频有精品视频高清 | 欧美国产日韩在线 | 羞羞网站视频 | 特级a欧美做爰片毛片 | 久久精品成人影院 | 欧美伦交 | 久久av一区二区 | 久久经典国产视频 | 日本一级黄色毛片 | 久久久久久久久久网站 | 国产成人77亚洲精品www | 日本在线播放一区 | 黄色片网站免费看 | 国产亚洲精品综合一区91 | 粉嫩蜜桃麻豆免费大片 | 一区www| 综合网日日天干夜夜久久 | 精品久久久久久久久久久下田 | 精品久久久久久久久久 | www.17c亚洲蜜桃| 国产女同玩人妖 | 国产精品视频一区二区三区四区国 | 99极品视频| 中国一级毛片在线视频 | 久草久视频|