ko-time/docs/v220/more.md
2022-12-01 11:04:28 +08:00

10 KiB
Raw Blame History

存储多样性

v2.2.0开始支持数据库存储接口信息功能,可在内存和数据库中进行切换

内存存储

内存豪华贵族推荐使用方式

更改配置:

ko-time.saver=memory #默认存储方式,无需此配置也行

Redis存储

正常推荐使用方式

1.更改配置:

ko-time.saver=redis

ko-time.data-prefix=xxx #如果多个项目共用一个redis最好配置此项通过该名称区分数据,如果项目配置过server.servlet.context-path,则自动取该配置

#redis配置

spring.redis.host: xxx

spring.redis.port: xxx

spring.redis.password: xxx

2.引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.其他

到此配置结束需要说明的是项目默认使用Springboot的StringRedisTemplate对象无需其他操作 如果对其不满意可以自定Bean如

@Bean("redisbean")
public StringRedisTemplate getRedisTemplate(RedisConnectionFactory connectionFactory){
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(connectionFactory);
        return template;
        }

然后配置

ko-time.redis-template: redisbean

数据库存储

注: 使用mysql 非常不推荐的使用方式,占用项目数据资源

为了减少占用项目资源对数据库的连接使用做了限制所以kotime统计数据更新比较慢

1.更改配置:

ko-time.saver=database

请引入MySQL相关依赖 注:默认使用项目的数据源,多数据源情况下默认使用主数据源,如果没有主数据源,请在配置中指定数据源:ko-time.data-source=数据源名称

2.数据表创建

数据库字段长度不够的自行调整

-- v2.2.4及以上版本
create table ko_method_node
(
    id          varchar(400) not null primary key comment '主键',
    name        varchar(400) null comment '类名+方法名',
    class_name  varchar(400) null comment '类名',
    method_name varchar(400) null comment '方法名',
    route_name  varchar(400) null comment '路由controller才有',
    method_type varchar(64)  null comment '方法类型'
) comment '方法信息表';


create table ko_method_relation
(
    id           varchar(400)   not null primary key comment '',
    source_id    varchar(400)   null comment '调用方id',
    target_id    varchar(400)   null comment '被调用方id',
    avg_run_time numeric(10, 2) null comment '平均耗时',
    max_run_time numeric(10, 2) null comment '最大耗时',
    min_run_time numeric(10, 2) null comment '最小耗时'
) comment '方法调用关系表';
;
create table ko_exception_node
(
    id         varchar(400) not null primary key comment '主键',
    name       varchar(400) null comment '异常名',
    class_name varchar(400) null comment '类名'
) comment '异常表';


create table ko_exception_relation
(
    id        varchar(400) not null primary key comment '',
    source_id varchar(400) null comment '调用方法id',
    target_id varchar(400) null comment '异常id',
    location  int          null comment '异常位置',
    message    varchar(400) null comment '异常消息'
) comment '异常关系表';

create table ko_param_ana
(
    source_id    varchar(400)   null comment '调用方法id',
    params       varchar(400)   null comment '参数组合,-分隔',
    avg_run_time numeric(10, 2) null comment '平均耗时',
    max_run_time numeric(10, 2) null comment '最大耗时',
    min_run_time numeric(10, 2) null comment '最小耗时'
) comment '参数分析表';

-- v2.2.3及以下版本
create table ko_method_node (
                                id varchar(400) not null primary key comment '主键' ,
                                name varchar(400) null comment '类名+方法名' ,
                                class_name varchar(400) null comment '类名' ,
                                method_name varchar(400) null comment '方法名' ,
                                route_name varchar(400) null comment '路由controller才有' ,
                                method_type varchar(64) null comment '方法类型'
) comment '方法信息表';


create table ko_method_relation (
                                    id varchar(400) not null primary key comment '' ,
                                    source_id varchar(400) null comment '调用方id' ,
                                    target_id varchar(400) null comment '被调用方id' ,
                                    avg_run_time numeric(10,2) null comment '平均耗时' ,
                                    max_run_time numeric(10,2) null comment '最大耗时' ,
                                    min_run_time numeric(10,2) null comment '最小耗时'
) comment '方法调用关系表';

;
create table ko_exception_node (
                                   id varchar(400) not null primary key comment '主键' ,
                                   name varchar(400) null comment '异常名' ,
                                   class_name varchar(400) null comment '类名' ,
                                   message varchar(400) null comment '异常消息'
) comment '异常表';


create table ko_exception_relation (
                                       id varchar(400) not null primary key comment '' ,
                                       source_id varchar(400) null comment '调用方法id' ,
                                       target_id varchar(400) null comment '异常id' ,
                                       location int null comment '异常位置'
) comment '异常关系表';

create table ko_param_ana (
                              source_id varchar(400) null comment '调用方法id' ,
                              params varchar(400) null comment '参数组合,-分隔' ,
                              avg_run_time numeric(10,2) null comment '平均耗时' ,
                              max_run_time numeric(10,2) null comment '最大耗时' ,
                              min_run_time numeric(10,2) null comment '最小耗时'
) comment '参数分析表';

方法调用信息扩展监听

如果需要做方法调用信息进行监听,然后做一些扩展的,可以使用此方法

1.新建监听类实现InvokedHandler并能加上注解@KoListener即可


@KoListener
public class TestInvoke implements InvokedHandler {
    @Override
    public void onInvoked(MethodNode current, MethodNode parent, Parameter[] names, Object[] values) {
        System.out.println("调用的方法:"+current);
        System.out.println("调用当前方法的上一级方法:"+parent);
        System.out.println("调用的方法-参数名称:"+names);
        System.out.println("调用的方法-具体参数:"+values);
    }
}

2.如果需要监听异常情况

实现InvokedHandler的默认方法即可


@KoListener
public class TestInvoke implements InvokedHandler {
    @Override
    public void onInvoked(MethodNode current, MethodNode parent, Parameter[] names, Object[] values) {

    }

    @Override
    public void onException(MethodNode current, MethodNode parent, ExceptionNode exception, Parameter[] names, Object[] values) {
        System.out.println("异常:"+exception);
    }
}

异常监听说明

开启了ko-time.exception-enable=true后:

自动开始监听方法的异常 在浏览器面板上可以显示 与全局异常捕获@ControllerAdvice不冲突

如果自己手动进行try-catch捕获,无法进行监听和显示, 可以使用KoUtil.throwException(e)或者KoUtil.recordException(e)进行改造,即可监听并显示:

两者的区别是:

KoUtil.throwException(e)和正常throw e一样无法继续往下执行了 KoUtil.recordException(e)仅仅是记录异常,代码可以往下执行

        try {
        //你的代码
        } catch (Exception e) {
        //做一些你自己的处理
        KoUtil.throwException(e);
        }

耗时预警通知

v2.2.5开始加入了邮件通知功能,当方法耗时超过阈值之后,可以选择进行邮件通知

Note: 请先确保网络通常

配置

1.必填

ko-time.mail-enable=true # 开启邮件通知 默认false
ko-time.mail-user=xxxx@qq.com # 设置发送者 可以设置为你的QQ邮箱 必填
ko-time.mail-code=xxxxxxx # 邮箱授权码 请到QQ邮箱申请 必填
ko-time.mail-receivers=xxxx@qq.com # 邮件接收者 多个请用英文逗号隔开 必填

2.选填

默认为qq邮箱服务器

qq邮箱授权码申请https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256

ko-time.mail-protocol=smtp # 邮件协议 默认smtp 可以不配置
ko-time.mail-host=smtp.qq.com # 邮件服务器 默认smtp.qq.comQQ邮件 可以不配置
ko-time.mail-port=587 # 邮件服务器 默认587QQ邮件端口 可以不配置
ko-time.mail-encoding=UTF-8 # 邮件编码 默认UTF-8 可以不配置
ko-time.mail-threshold=4 # 邮件触发阈值 默认4 耗时n次超过阈值即发送邮件  可以不配置
ko-time.mail-scope=Controller # 邮件检测范围 默认Controller接口层   可选{All,Controller,Service,Dao,Other}

添加依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

接收邮件

不用但心同一个接口耗时严重时重复疯狂地收到邮件,发过一次之后会等很久的

输入图片说明

热更新

v2.2.8开始 在不重启项目的情况通过KoTime在线更新代码

注意:该功能基于 jvm attach api 不支持在类中新增方法或者属性后进行热更新,仅支持方法内部的代码更改

浏览器访问/koTime找到热更新选项上传编译过的的类文件

更改代码->maven compile->选择target/classes目录下需要更新的类->填写类名->提交

使用本地化插件Idea内一键更新