[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)
至此,项目整合完毕。
- 青锋项目介绍
- 系统框架介绍
- 搭建开发环境
- 涵盖技术
- 构建后台框架
- springboot项目构建
- mvnw介绍
- 整合mybatis-plus
- mybatisplus知识点
- SQL日志打印工具p6spy
- mybatis-plus分页
- mybatis-plus多数据源使用
- mybatis-plus乐观锁
- springboot全局异常
- 整合拦截器/过滤器
- 实现业务功能模块
- 数据结构设计
- 框架完善-工具类-注释、验证
- 业务模块实现介绍
- 整合springsecurity权限控制
- Spring-Security-OAuth2简介
- springboot整合springsecurity
- springsecurity实现访问权限控制
- 整合登录图形验证码
- springboot整合Sentinel-实现验证码限流
- 架构权限功能说明
- 菜单、功能权限的讲解
- 数据权限的讲解
- Quartz动态定时器整合
- 整合quartz动态定时器
- quartz动态定时案例介绍
- 代码生成器
- freemarker模板引擎常用语法
- 代码生成器功能设计
- 代码生成器实现方式
- Vue前端教程
- 快速开始
- 项目组成介绍
- layouts布局组件介绍
- 动态锁屏介绍
- IndexedDB 浏览器数据库-参考
- Axios基础知识
- Axios请求的封装
- 静态路由和菜单
- 动态路由和权限控制
- 功能权限与指令
- 系统登录和token刷新
- Vuex状态管理使用说明
- Vue3之setup讲解及使用
- 架构功能拓展
- 整合swagger接口文档
- 接口授权签名认证
- 集成prometheus+Grafana监控
- 请求调用链路追踪