用system.currenttimemillis()统计api延迟需在请求开始和结束时各取时间戳相减,单位毫秒;推荐spring aop统一处理以避免遗漏;注意其精度约10–15ms,不适合纳秒级测量,长期比对不可靠。

用 System.currentTimeMillis() 统计 API 处理延迟,核心是在请求开始和结束时各取一次时间戳,相减得到毫秒级耗时。
在 Controller 入口和出口记录时间
最直接的方式是在处理请求的方法前后调用 currentTimeMillis():
- 方法开始前获取起始时间(
long start = System.currentTimeMillis();) - 方法执行完毕后获取结束时间(
long end = System.currentTimeMillis();) - 延迟 =
end - start,单位是毫秒
注意:这个值包含整个方法执行时间,包括业务逻辑、数据库操作、远程调用等,但不包含网络传输、Servlet 容器开销或拦截器额外逻辑(除非你把计时点放得更外层)。
用 Spring AOP 统一统计更可靠
手动加时间戳容易遗漏或写错位置,推荐用 AOP 在切面中统一处理:
- 定义一个切点匹配所有 @RestController 方法
- 在
@Around前获取 start 时间,在proceed()后获取 end 时间 - 把耗时打印到日志,或上报到监控系统(如 Micrometer + Prometheus)
这样避免重复代码,也更容易统一格式(比如加上 traceId、URI、HTTP 状态码),便于后续分析慢接口。
注意 currentTimeMillis 的精度和局限性
System.currentTimeMillis() 基于系统时钟,精度通常为 10–15ms(取决于 OS),不适合微秒级或纳秒级精准测量:
- 对大多数 Web API 延迟(>10ms)已足够,比如 127ms、489ms 这类结果可信
- 若需更高精度(如评估单个 DAO 调用),应改用
System.nanoTime() - 不要用它做长时间跨度的“绝对时间”比对(比如跨 JVM 重启),因系统时钟可能被 NTP 调整
简单示例:Spring Boot 中记录日志
在 Controller 方法里快速验证:
public ResponseEntity<string> getData() {
long start = System.currentTimeMillis();
try {
String result = service.process();
long cost = System.currentTimeMillis() - start;
log.info("API /api/data completed in {} ms", cost);
return ResponseEntity.ok(result);
} catch (Exception e) {
long cost = System.currentTimeMillis() - start;
log.warn("API /api/data failed after {} ms: {}", cost, e.getMessage());
throw e;
}
}</string>
这种方式适合调试或临时观察,生产环境建议交给 AOP 或过滤器(如 OncePerRequestFilter)统一处理。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











