[TOC] # koTime介绍 项目性能分析工具,追踪方法调用链路快速定位性能瓶颈,我们采用koTime。 koTime开源地址:[https://gitee.com/huoyo/ko-time](https://gitee.com/huoyo/ko-time) # koTime特点 * 实时监听方法, * 统计运行时长web展示方法调用链路,瓶颈可视化追踪 # springboot-pom整合 ## 引入依赖pom ``` <dependency> <groupId>cn.langpy</groupId> <artifactId>ko-time</artifactId> <version>2.0.9</version> </dependency> ``` ## 配置application ``` ko-time: pointcut: execution(public * com.qingfeng..*.*(..)) ``` 其他配置参数 ``` ko-time.enable=true # 是否开启koTime,默认开启,当为false时,关闭koTime ko-time.log-enable=false # 是否开启控制输出,默认false ko-time.log-language=chinese # 控制台输出语言(english/chinese)默认chinese ko-time.threshold=800.0 # 时间阈值,用于前端展示,大于阈值显示红色,小于阈值显示绿色,默认800 ko-time.context-path=http://localhost:80 # 前端页面调用接口的上下文环境,无法自动获取时可手动配置,一般情况切记不要配置 v2.0.1开始支持 ko-time.exception-enable=true # 是否开启异常检测,默认为false,开启后会对方法内部抛出的异常进行统计 v2.0.0开始支持 ko-time.auth-enable=true # 是否开启认证,默认为false,开启后需要登录才能访问调用链路 v2.0.2开始支持 ko-time.user-name=xxxx # 登录用户 v2.0.2开始支持 ko-time.password=xxxx # 登录密码 v2.0.2开始支持 ko-time.param-analyse=true #是否开启入参组合分析 默认开启 v2.0.8开始支持 双击方法节点即可看到效果 ``` ## 使用说明介绍 注意: 1.引入了上面的依赖和配置以后,确认项目中是否有aop相关的包,koTime使用了@Aspect注解,未引入的自行引入,如aspectj或者spring-boot-starter-aop 2.做完前面的步骤,koTime的集成已经完毕,无需进行其他配置 3.如果后台有权限认证,需要放开/koTime和/koTime/\*\* * 启动项目访问 /koTime 路径即可 * 如果仅仅只是想统计某个方法,在方法上加上@ComputeTime即可,控制台会输出耗时 如果项目自定义的contextpath,访问如http://localhost:8080/xxx服务/koTime 如:application.properties中定义了server.servlet.context-path=/myservice,那么访问路径为http://localhost:8080/myservice/koTime如果页面能正常显示,但是无法获取方法链路,可配置ko-time.context-path=http://localhost:8080/myservice ## 运行访问 ### 1.接口调用统计 根据颜色判断需要优化的接口数,红色为待优化,绿色为正常 ![](http://qnyimg.qingfeng.plus/171d3ace59462b9e41389c0e9248d6b2) ### 2.接口列表总览 在列表中会显示该接口的运行耗时,如果为绿色则无需优化,如果为红色,需要详细查看问题所在 ![](http://qnyimg.qingfeng.plus/2a3e16f7a2a543048c808131cbe85030) ### 3.调用详情 点开接口时,会显示该接口的调用链路以及运行时长,红色节点即为需要优化的节点 ![](http://qnyimg.qingfeng.plus/51bd085047f12b2bdd49c24692b3a071) # springboot-源码整合 ## 多模块拆分 项目模块化,将原来的项目拆成多模块,效果如下: ![](http://qnyimg.qingfeng.plus/0395e2d939c233dc017d4df0a16d0b0b) ### 创建根模块-qingfeng pom主要配置如下: ``` <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.2</version> <relativePath/> </parent> <groupId>com.qingfeng</groupId> <artifactId>qingfeng</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>qingfeng-admin</module> <module>qingfeng-common</module> <module>qingfeng-kotime</module> </modules> ``` ### 创建主模块-qingfeng-admin ``` <parent> <groupId>com.qingfeng</groupId> <artifactId>qingfeng</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>qingfeng-admin</artifactId> <name>qingfeng-admin</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.qingfeng</groupId> <artifactId>qingfeng-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.qingfeng</groupId> <artifactId>qingfeng-kotime</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> ``` ![](http://qnyimg.qingfeng.plus/f357a04f11b545545bc9c04a98837d95) ### 创建公共模块-qingfeng-common ``` <parent> <groupId>com.qingfeng</groupId> <artifactId>qingfeng</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>qingfeng-common</artifactId> <name>qingfeng-common</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> </dependencies> ``` ![](http://qnyimg.qingfeng.plus/c372fab60368cd7222bc254c6369ecca) ### 创建链路模块-qingfeng-kotime pom不导入任何模块。 ``` <groupId>com.qingfeng</groupId> <artifactId>qingfeng-kotime</artifactId> <version>1.0-SNAPSHOT</version> <name>qingfeng-kotime</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> ``` ![](http://qnyimg.qingfeng.plus/b7ef98e8c1a0c60c485c5dcf8239e10b) ## kotime源码整合 ### 源码下载 源码下载:[https://gitee.com/huoyo/ko-time](https://gitee.com/huoyo/ko-time) ![](http://qnyimg.qingfeng.plus/244cd1f770e70e1176fa74c9d7d0b082) ### 源码拷贝 将下面src/main下面的java和resources文件拷贝到-qingfeng-kotime模块下的src/main下面。如下图: ![](http://qnyimg.qingfeng.plus/0a4bae2d2f2fb39bcce3e6034071ef6a) ![](http://qnyimg.qingfeng.plus/acf667947c419580477452ff6cee159f) ### 拷贝pom依赖 将源码中的pom文件的依赖,拷贝到qingfeng-kotime下的pom文件。 ![](http://qnyimg.qingfeng.plus/11e94b8849ec982a459dd6e101610240) ![](http://qnyimg.qingfeng.plus/32a93d2ffa1d1733c1102aa95a3927f5) ### 项目运行 整合完成,启动下面后,访问:[http://127.0.0.1:8090/koTime](http://127.0.0.1:8090/koTime) ![](http://qnyimg.qingfeng.plus/a7d21d9e4b94255498b647fa9bbedf84) 至此,项目整合完毕。