当前位置:首页 > Java

java接口如何看超时

2026-03-18 22:02:41Java

监控接口超时的常用方法

使用Spring Boot的Actuator和Micrometer 在Spring Boot应用中,可以通过Actuator暴露的/actuator/metrics/http.server.requests端点获取请求耗时统计。配置Micrometer对接Prometheus或Grafana可实现可视化监控。

代码示例配置

# application.yml
management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    distribution:
      percentiles:
        http.server.requests: 0.5,0.9,0.99

手动埋点计时

AOP切面实现 通过Spring AOP在接口方法前后记录时间差:

@Aspect
@Component
public class TimeoutAspect {
    @Around("@annotation(org.springframework.web.bind.annotation.GetMapping)")
    public Object logTimeout(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long duration = System.currentTimeMillis() - start;
        if (duration > 1000) { // 自定义阈值
            log.warn("Slow API: {} took {}ms", joinPoint.getSignature(), duration);
        }
        return result;
    }
}

HTTP客户端超时配置

RestTemplate设置

@Bean
public RestTemplate restTemplate() {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setConnectTimeout(3000);  // 连接超时
    factory.setReadTimeout(5000);     // 读取超时
    return new RestTemplate(factory);
}

Feign客户端配置

java接口如何看超时

feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 4000

日志分析方案

在logback-spring.xml中配置MDC记录耗时:

<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %X{requestTime}ms %msg%n</pattern>

配合过滤器记录时间:

public class TimeLogFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        long start = System.currentTimeMillis();
        chain.doFilter(request, response);
        MDC.put("requestTime", String.valueOf(System.currentTimeMillis() - start));
    }
}

分布式链路追踪

集成SkyWalking或Zipkin等工具,在application.yml中添加:

java接口如何看超时

spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0

JVM线程分析

通过jstack检测阻塞线程:

jstack -l <pid> > thread_dump.txt

查找处于TIMED_WAITING状态的线程及堆栈信息,定位耗时操作。

数据库查询监控

启用HikariCP的慢查询日志:

spring.datasource.hikari.leak-detection-threshold=3000
logging.level.net.ttddyy.dsproxy.listener=DEBUG

MyBatis Plus配置SQL执行时间阈值:

@Bean
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor interceptor = new PerformanceInterceptor();
    interceptor.setMaxTime(1000); // 毫秒
    interceptor.setFormat(true);
    return interceptor;
}

标签: 如何看接口
分享给朋友:

相关文章

vue实现接口配置

vue实现接口配置

Vue 中实现接口配置的方法 在 Vue 项目中配置接口通常涉及以下几个关键步骤: 创建 API 配置文件 新建一个 api 目录,创建 index.js 文件作为接口配置入口。可以将接口按模块分类…

vue 接口与实现

vue 接口与实现

Vue 接口与实现的核心概念 Vue.js 的接口(Interface)与实现(Implementation)主要围绕组件的设计模式、API 的抽象层以及底层响应式原理展开。以下是关键点分析: 组件…

vue接口实现导出

vue接口实现导出

Vue 接口实现导出功能 在 Vue 项目中实现导出功能通常涉及前端调用后端接口获取数据,并以文件形式下载。以下是几种常见的实现方式: 通过 Blob 对象下载文件 当后端返回文件流时,前端可通过…

如何看react源码

如何看react源码

阅读React源码的方法 克隆React仓库 从GitHub克隆React的官方仓库,切换到稳定版本分支。React采用Monorepo结构,核心代码在packages/react和packages/…

react 共用组件如何请求接口

react 共用组件如何请求接口

共用组件请求接口的设计方法 在React中设计共用组件时,接口请求通常需要考虑组件的复用性、数据管理以及与父组件的通信。以下是几种常见的设计模式: 通过Props传递数据 父组件负责获取数据并通过p…

React脚手架如何看启动命令

React脚手架如何看启动命令

React脚手架查看启动命令的方法 在React项目中,启动命令通常配置在package.json文件的scripts部分。以下是具体操作步骤: 打开项目根目录下的package.json文件,查找…