可以通过自定义注解+ AOP 实现业务方法执行耗时的自动监控统计,核心是拦截标注了@MonitorTime注解的方法,在其执行前后记录时间差并按配置打印日志或上报指标。

可以通过自定义注解 + AOP(面向切面编程)实现业务方法执行耗时的自动监控统计,核心是拦截标注了该注解的方法,在其执行前后记录时间差并上报或打印。
定义耗时监控注解
创建一个运行时保留、可作用于方法的自定义注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MonitorTime {
String value() default ""; // 可用于标识业务模块或方法用途
boolean logToConsole() default true; // 是否控制台打印
boolean reportToMetric() default false; // 是否上报到监控系统(如 Prometheus)
}
编写 AOP 切面处理逻辑
使用 @Around 通知捕获方法执行全过程,计算耗时,并根据注解配置做不同处理:
- 获取目标方法上的 @MonitorTime 注解实例
- 记录开始时间(
System.nanoTime()更精确) - 执行原方法(
proceed()) - 计算耗时(单位建议转为毫秒,保留小数或四舍五入)
- 按注解配置决定是否打印日志或调用指标上报工具(如 Micrometer 的 Timer.record())
集成日志或监控系统(可选增强)
单纯打印日志较基础,生产中建议对接统一监控体系:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 搭配 SLF4J + Logback 输出结构化日志(含方法名、参数摘要、耗时、异常标记)
- 集成 Micrometer,用
Timer.builder(...).register(registry)上报 P90/P95 耗时分布 - 若用 Spring Boot Actuator,可暴露
/actuator/metrics查看实时指标 - 异常情况下也应记录耗时(避免漏掉慢 SQL 或阻塞导致的失败调用)
在业务方法上使用注解
只需在需要监控的方法上添加注解,无需修改业务逻辑:
@Service
public class UserService {
@MonitorTime(value = "user-login", reportToMetric = true)
public User login(String username, String password) {
// 模拟业务处理
try { Thread.sleep(120); } catch (InterruptedException e) {}
return new User();
}
}
只要 AOP 配置生效(Spring 中确保 @EnableAspectJAutoProxy 或对应配置启用),该方法每次执行都会被自动统计耗时。

















