成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Spring Boot 中優(yōu)雅的計(jì)算方法執(zhí)行時(shí)間

開(kāi)發(fā) 后端
本文讓我們通過(guò) AOP 來(lái)實(shí)現(xiàn)在方法頂部添加一個(gè)注解,就可以非常高效地計(jì)算所有方法的執(zhí)行時(shí)間的功能。

計(jì)算方法執(zhí)行時(shí)間是大多數(shù)后端應(yīng)用程序中常見(jiàn)的非功能性需求。以下是一些計(jì)算執(zhí)行時(shí)間的傳統(tǒng)方法:

long startTime = (System.currentTimeMillis());
// 你的邏輯代碼
long executionTime = (System.currentTimeMillis() - startTime) / 1000;
LOGGER.info("計(jì)算所花費(fèi)的時(shí)間為:{} 秒", executionTime);

StopWatch watch = new StopWatch();
watch.start();
// 你的邏輯代碼
watch.stop();
LOGGER.info("計(jì)算所花費(fèi)的時(shí)間為:{} 秒", watch.getTotalTimeSeconds());

可以看到需要在每個(gè)需要計(jì)算執(zhí)行時(shí)間的方法里增加相同的計(jì)算代碼,這種統(tǒng)計(jì)代碼執(zhí)行時(shí)間的方式存在代碼冗余、違反 DRY 原則、侵入性強(qiáng)等問(wèn)題。

接下來(lái)讓我們通過(guò) AOP 來(lái)實(shí)現(xiàn)在方法頂部添加一個(gè)注解,就可以非常高效地計(jì)算所有方法的執(zhí)行時(shí)間的功能。

步驟一:?jiǎn)⒂?Spring AOP

首先,通過(guò)在 POM.xml 中添加以下內(nèi)容來(lái)啟用 Spring AOP:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

步驟二:創(chuàng)建自定義注解

現(xiàn)在讓我們?cè)?Spring Boot 中創(chuàng)建一個(gè)名為 ExecutionTimeLogger 的自定義注解。可以看到,該注解在運(yùn)行時(shí)起作用,并且適用于方法級(jí)別。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExecutionTimeLogger {
}

步驟三:創(chuàng)建切面類

創(chuàng)建一個(gè)作為切面的新類,包含計(jì)算方法執(zhí)行時(shí)間的邏輯。在 Spring AOP 中有多種使用切面的方式,這里使用 @Around 注解。創(chuàng)建 ExecutionTimeLoggerAspect 類并使用 @Aspect 注解,再創(chuàng)建 executionTimeLogger 方法并添加 @Around 注解,將注解名稱作為參數(shù)傳遞給 @Around,這樣該方法會(huì)在帶 ExecutionTimeLogger 注解的方法執(zhí)行前后被調(diào)用:

@Aspect
@Component
publicclass ExecutionTimeLoggerAspect {
    static final Logger logger = LoggerFactory.getLogger(ExecutionTimeLoggerAspect.class);

    @Around("@annotation(ExecutionTimeLogger)")
    public Object executionTimeLogger(ProceedingJoinPoint joinPoint) {
        try {
            long startTime = System.currentTimeMillis();
            Object proceed = joinPoint.proceed();
            long executionTime = (System.currentTimeMillis() - startTime);
            logger.info("{}方法在{}毫秒內(nèi)執(zhí)行完畢", joinPoint.getSignature(), executionTime);
            return proceed;
        } catch (Throwable e) {
            logger.error("在計(jì)算{}方法執(zhí)行時(shí)間時(shí)出錯(cuò)", joinPoint.getSignature(), e);
            return null;
        }
    }
}

步驟四:使用自定義注解

所有必需的配置都已完成。現(xiàn)在我們唯一需要做的就是在想要計(jì)算 Java 代碼中方法執(zhí)行時(shí)間的地方使用該注解。假設(shè)要計(jì)算方法的執(zhí)行時(shí)間,如下面的代碼所示。只需在方法頂部添加注解即可。

public class CustomLoggingService {
    @ExecutionTimeLogger
    public void myMethod() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

步驟五:查看輸出

當(dāng) myMethod 在你的代碼中執(zhí)行時(shí)的輸出:

c.n.t.a.ExecutionTimeLoggerAspect|void com.main.project.CustomLoggingService.myMethod()方法在20毫秒內(nèi)執(zhí)行完畢

是不是很簡(jiǎn)單?想象一下節(jié)省了多少時(shí)間和精力。只需寫一遍計(jì)算執(zhí)行時(shí)間的代碼,然后在需要計(jì)算執(zhí)行時(shí)間的地方繼續(xù)使用注解即可。

總結(jié)一下:

  • 創(chuàng)建自定義注解。
  • 創(chuàng)建 @Aspect 類,包含計(jì)算執(zhí)行時(shí)間的方法。
  • 用 @Around 聲明方法并指定為自定義注解執(zhí)行。
  • 在要記錄執(zhí)行時(shí)間的方法上加注解。
責(zé)任編輯:趙寧寧 來(lái)源: 程序猿技術(shù)充電站
相關(guān)推薦

2021-02-24 11:44:35

語(yǔ)言計(jì)算函數(shù)嵌入式系統(tǒng)

2010-09-08 15:00:03

SQL語(yǔ)句執(zhí)行

2010-11-18 15:53:30

Oracle語(yǔ)句執(zhí)行時(shí)

2018-07-18 15:13:56

MCU代碼時(shí)間

2009-11-26 11:05:44

PHP計(jì)算頁(yè)面執(zhí)行時(shí)間

2024-04-12 07:50:40

Python監(jiān)控利器Time 模塊

2020-07-14 08:17:26

代碼執(zhí)行時(shí)間

2020-08-03 16:00:31

Linux命令進(jìn)程

2018-11-22 09:15:45

Linux命令進(jìn)程

2011-05-17 13:32:04

oracle

2024-05-10 08:44:53

C#軟件開(kāi)發(fā)優(yōu)化代碼

2010-09-06 13:17:19

SQL Server語(yǔ)句

2010-04-28 12:33:36

Oracle自定義函數(shù)

2022-09-13 08:51:26

Python性能優(yōu)化

2021-11-05 07:47:55

API計(jì)算任務(wù)

2024-07-03 13:51:02

SQL毛刺數(shù)據(jù)庫(kù)

2023-01-27 15:28:04

開(kāi)發(fā)Python內(nèi)存

2019-08-28 07:45:45

數(shù)據(jù)存儲(chǔ)層多線程

2012-01-10 10:44:36

字符串

2024-09-27 12:27:31

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91精品国产色综合久久 | 免费午夜视频 | 天堂网中文字幕在线观看 | 欧美一区二区激情三区 | 美女天天干天天操 | 爱草视频| 日韩av一区二区在线观看 | 少妇黄色 | 久久久精品网站 | 精品日韩 | 亚洲狠狠爱 | 在线一区视频 | 国产黄色在线观看 | 最新国产精品精品视频 | av网站免费在线观看 | 欧美国产视频 | 黄色毛片在线观看 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 日本亚洲欧美 | 亚洲毛片在线观看 | 国产一区欧美 | 欧美日韩在线观看视频网站 | 国产精品不卡一区 | 欧美舔穴| 欧美极品在线 | 亚洲精品视频在线看 | 三级黄色片在线 | 日韩av免费在线观看 | 国产精品久久网 | 一级视频在线免费观看 | 国产精品国产三级国产aⅴ浪潮 | 亚州av在线| 欧美日产国产成人免费图片 | 亚洲高清在线观看 | 日韩在线欧美 | 日本久久网 | 亚洲综合二区 | 国产一区不卡 | 久久成人精品视频 | 99精品99久久久久久宅男 | 日本免费视频 |