千家信息网

如何知道整个系统每个方法的执行时间

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"如何知道整个系统每个方法的执行时间",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何知道整个系统每个方法的执行时间"吧!(一)前言
千家信息网最后更新 2026年10月31日如何知道整个系统每个方法的执行时间

这篇文章主要讲解了"如何知道整个系统每个方法的执行时间",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何知道整个系统每个方法的执行时间"吧!

(一)前言

最近到年底了,上线三个月的系统也已经稳定了。不过项目经理最近感觉系统变慢了,想知道整个系统前端和后端所有方法的执行时间。是的你没有听错,是每个方法。这个需求一提出来就被整蒙了,给每个方法计算执行时间,这不是平白给系统压力吗?

(二)思路

既然提了,先给思路吧。其实很简单,每个方法执行前记录一个时间戳,执行结束后记录一个时间戳,相减就是执行时间。但是去每个方法里改是不现实的,那么多代码,如果去侵入那工作量也太大了,而且如果有一天项目经理又不要这个功能了呢?

一听到这个需求,就应该想到AOP,用了那么久的Spring,IOC、AOP背的滚瓜烂熟,现在就是应用的时候了。

(三)使用AOP记录时间

AOP的概念就不在这里提了,面向切面,无侵入开发,正适合这个需求。而且20行代码可以解决问题。

3.1 引入依赖

    org.springframework.boot    spring-boot-starter-aop

3.2 配置切面

首先配置一个切入点,我这里要让切面在TestController这个类中的所有方法上生效

@Slf4j@Component@Aspect@Order(10)public class LogAspect {        //配置切入点,即执行的位置    @Pointcut("execution(* com.javayz.codinguser.controller.TestController.*(..))")    public void pointCut(){    }        //使用环绕通知,在方法的执行前后分别记录一个时间相减    @Around("pointCut()")    public Object doLog(ProceedingJoinPoint proceedingJoinPoint){        long startTime = System.currentTimeMillis();        Object object=null;        try {            object=proceedingJoinPoint.proceed();        } catch (Throwable throwable) {            throwable.printStackTrace();        }finally {            long endTime = System.currentTimeMillis();            log.info(proceedingJoinPoint.getSignature().toShortString()+"方法执行了:"+(endTime-startTime)+"ms");        }        return object;    }}

TestController方法是这样的:

@RestController@RequestMapping("/testApi")public class TestController {    @GetMapping("/test1")    public String testAop(){        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        return "testAop";    }}

3.3 测试一下

直接调用/testApi/test1,效果出来了

3.4 自定义一个注解

现在已经可以满足项目经理的需求了,如果以后新的代码没有在切入点的范围内,就又不生效了,因此定义一个注解吧,要记录时直接写个注解

@Target(value = ElementType.METHOD)@Retention(value = RetentionPolicy.RUNTIME)@Documentedpublic @interface LogAnnotation {}

配置切入点的时候增加注解

@Pointcut("execution(* com.javayz.codinguser.controller.TestController.*(..)) || @annotation(com.javayz.codinguser.annotation.LogAnnotation)")public void pointCut(){}

好了,在需要执行的时候加上这个注解就OK了。

(四)关于记录数据的问题

项目经理还希望可以随时查某个时间的方法执行时间,那就必须存下来这些数据了。

现在这个系统共有4万人使用,如果存入数据库,我在表里定义三个字段:时间、调用人员、调用时间,调用方法,一条数据大约在40字节大小。按四万个人的使用,一天最少也要产生4000万条数据,大约1.5G。数据量倒是没关系,对数据库写入的压力就更大了。

如果存在日志里也一样,日志会变得特别大,而且排查起来不方便。

感谢各位的阅读,以上就是"如何知道整个系统每个方法的执行时间"的内容了,经过本文的学习后,相信大家对如何知道整个系统每个方法的执行时间这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

时间 方法 系统 数据 注解 切入点 经理 需求 项目 配置 代码 切面 就是 思路 时候 问题 学习 三个 内容 压力 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 广东猪兼强互联网科技有限公司 广州紫鲸互联网科技有限公司 今日互联网科技 互联网科技有限公司图片 世界互联网领先科技成果 狮子座互联网科技培训 互联网科技宣传片 博兴的互联网电子科技公司 广州慧亚互联网科技怎么样 银川新华互联网科技职业技术培训学校图片 互联网对科技的发展 彤创互联网科技有限公司 宝灵互联网科技有限公司 互联网科技扶贫时间 朱啸虎曾投资哪些互联网科技企业 无锡工业互联网科技有限公司 中国互联网有什么科技 信承诺互联网科技有限公司 科技互联网公司两年变化 云南咖啡 齐家互联网科技 互联网科技媒体 卓越科技(互联网 ) 互联网科技扶贫时间 互联网科技公司营业执照怎么办理 济南小医互联网科技有限公司招聘 互联网公司属于科技吗 张家口科技产业互联网平台 好易买互联网科技
0