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

Spring Boot 實戰:通過 Agent 統計接口調用耗時

開發 前端
盡管Actuator不是嚴格意義上的Agent,但它提供了一種輕量級的方式來監控Spring Boot應用,并且與Spring Boot生態緊密結合。

隨著微服務架構的普及,API的性能監控變得愈發重要。對于Spring Boot應用,記錄接口耗時不僅可以幫助我們優化性能,還能在出現問題時快速定位。接口耗時直接影響用戶體驗和系統性能,通過記錄和分析接口耗時,我們可以識別性能瓶頸并進行優化,同時生成統計報表來監控接口健康狀態。

Agent介紹

在Spring Boot中,我們通常通過幾種方式來統計接口調用耗時,其中一種方法是使用Agent。Agent是一種工具,可以插入到Java虛擬機(JVM)中,監控并收集應用運行時的各種信息,包括接口調用耗時。然而,在Spring Boot中,更常見且簡便的方式是使用Actuator、AOP或過濾器來實現這一功能。盡管本文主題是通過Agent進行統計,但為了更好地理解和對比,我們也會簡要介紹Spring Boot Actuator及其他方法。

Spring Boot Actuator:Actuator是Spring Boot提供的對應用的自省和監控功能,如健康檢查、審計、指標收集、HTTP跟蹤等。通過Actuator,我們可以輕松地采集應用的內部信息,并暴露給外部的模塊,支持HTTP和JMX,還可以與一些第三方監控系統(如Prometheus)整合。

盡管Actuator不是嚴格意義上的Agent,但它提供了一種輕量級的方式來監控Spring Boot應用,并且與Spring Boot生態緊密結合。

代碼思路

1. 使用AOP統計接口調用耗時

AOP(面向切面編程)是一種編程范式,允許我們將橫切關注點(如日志記錄、事務管理等)與業務邏輯代碼分離。在Spring Boot中,我們可以使用AOP來攔截接口調用,并記錄其耗時。

步驟:

① 引入依賴:在pom.xml中引入AOP相關的依賴。

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

② 創建切面類:定義一個切面類,利用@Around注解來攔截請求方法。

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class PerformanceAspect {

    @Around("execution(* com.example.demo.controller.*.*(..))")
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object proceed = joinPoint.proceed();
        long executionTime = System.currentTimeMillis() - start;
        System.out.println("方法: " + joinPoint.getSignature() + " 耗時: " + executionTime + " 毫秒");
        return proceed;
    }
}

③ 測試接口:創建一個簡單的REST控制器來測試耗時統計功能。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() throws InterruptedException {
        // 模擬耗時操作
        Thread.sleep(200);
        return "測試成功";
    }
}

訪問/test接口時,控制臺將會打印該接口的執行耗時信息。

2. 使用Spring Boot Actuator

雖然Actuator不是Agent,但它提供了豐富的監控功能,可以與其他監控系統結合使用。

步驟:

① 引入依賴:在pom.xml中添加Actuator的starter。

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

② 訪問端點:添加依賴后,啟動服務,通過請求查看暴露的端點,如http://localhost:9099/actuator。

③ 配置端點:在application.yml中配置需要暴露的端點。

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

3. 使用過濾器統計接口調用耗時

另一種方法是實現一個自定義的過濾器來記錄接口訪問日志及請求耗時。

步驟:

① 定義過濾器類:實現javax.servlet.Filter接口。

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Slf4j
@WebFilter(filterName = "ApiAccessFilter", urlPatterns = "/*")
public class ApiAccessFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        long start = System.currentTimeMillis();
        log.info("[Api Access] start. uri: {}, method: {}, client: {}", request.getRequestURI(), request.getMethod(), getClientIp(request));
        filterChain.doFilter(servletRequest, servletResponse);
        log.info("[Api Access] end. duration: {}ms", System.currentTimeMillis() - start);
    }

    @Override
    public void destroy() {
    }

    private String getClientIp(HttpServletRequest request) {
        // 獲取客戶端IP地址的邏輯
    }
}

② 啟用過濾器:在啟動類上通過@ServletComponentScan注解指明該過濾器。

@SpringBootApplication
@ServletComponentScan("com.example.demo")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

總結

在Spring Boot中,通過AOP、Actuator或自定義過濾器等方式,我們可以有效地統計接口調用耗時,并進行性能監控。AOP提供了一種優雅且非侵入性的方式來攔截和記錄接口調用耗時,而Actuator則提供了豐富的監控功能,可以與第三方監控系統結合使用。自定義過濾器則提供了更靈活的控制,適用于特定的監控需求。這些方法各有優劣,開發者可以根據實際需求和項目特點選擇合適的方式進行實現。

責任編輯:趙寧寧 來源: Java技術營地
相關推薦

2024-11-08 09:06:16

agentJava探針

2024-10-18 08:00:00

SpringBoot框架開發

2023-03-16 08:14:57

2024-03-11 09:32:55

WebClientSpringHTTP

2025-02-28 13:00:00

SpringBoot接口接口安全

2025-04-08 08:01:31

2018-11-02 15:45:41

Spring BootRedis數據庫

2020-04-23 15:59:04

SpringKafka集群

2023-10-16 23:06:26

2025-06-26 02:22:00

Spring接口國際化

2021-05-18 07:30:36

開發Spring Boot日志

2025-05-14 04:00:00

2025-03-03 13:08:36

2023-10-16 11:12:29

2022-07-27 08:49:34

接口加密解密

2025-06-26 01:10:00

服務定位解析器Spring

2024-03-08 10:05:09

SpringHTTP接口

2025-06-06 08:28:56

2024-09-27 15:24:15

Spring數據加解密

2025-03-26 03:25:00

SpringGuavaCaffeine
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频免费观看 | 久久国产日韩欧美 | 免费高清av | av一级久久| 日韩一级免费 | 日韩在线国产精品 | 欧美精品欧美精品系列 | 国产精品jizz在线观看老狼 | 影音先锋男 | 在线精品一区二区三区 | 99国产精品久久久 | 久久精品 | 精品国产18久久久久久二百 | 久久久www成人免费精品张筱雨 | 亚洲国产精品一区二区久久 | 亚洲一区自拍 | 欧美日韩亚洲一区 | 久久久精品影院 | 亚洲视频www | 亚洲一区日韩 | 99爱在线免费观看 | 国产精品成人久久久久 | 成人免费在线 | 男女污污动态图 | 日韩亚洲视频在线 | 黄色日本视频 | 美女拍拍拍网站 | 亚洲综合色视频在线观看 | 亚洲欧美另类在线观看 | 欧美一级片在线 | 欧美激情视频一区二区三区在线播放 | 国产伦精品一区二区三区四区视频 | av午夜电影 | 精品成人 | 久久精品在线免费视频 | 欧美一区中文字幕 | va在线| 亚洲 中文 欧美 日韩 在线观看 | 超碰人人人 | 97视频在线免费 | 亚洲影音先锋 |