# query-center **Repository Path**: jamesgan/query-center ## Basic Information - **Project Name**: query-center - **Description**: 在其他系统中抽离出sql的定义部分,在该系统上定义sql,然后通过定义的名称远程调用(类似于PRC的方式), 并返回数据结果 - **Primary Language**: Kotlin - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-12-27 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 项目介绍 在其他系统中抽离出sql的定义部分,在该系统上定义sql,然后通过定义的名称远程调用(类似于PRC的方式), 并返回数据结果。 结构: starter是springboot自动配置jar包,demo是示例 sql类型:查询sql、更改sql、存储过程、脚本 sql渲染方式: 1> 类似于mybatis中的参数注入:${name,IN,VARCHAR},#{name,IN,VARCHAR} 2> ?占号符 3> freemarker 模板渲染: ${name_} ${name_IN_VARCHAR} 传输方式:http、netty 输出类型:List,List> ### 迭代 18/12/19 - 21 1>使用springjpa来存储数据 2>添加sql渲染方式 3>完成与页面的接口对接 18/12/24 1>页面查看结果的数量限制(7),且支持多个结果视图返回 2>添加execute方法执行sql语句,不再使用query/update,移除定义中的SqlCommandType参数 3>修改ResultSetHandler的处理方式为根据statement自动适配 18/12/25 重构 1>添加QuerySource/project/define的事件发布, 并监听处理ConnectionFactory 2>添加query-remote-http 模块,实现集群 18/12/26 1>添加query-remote-netty 模块,实现集群 2>服务端所有的数据源都会进行池化,移除服务端的projectNames配置 18/12/28 1>添加一个完整项目(数据源、项目、定义)的导出导入 2>client添加queryCenterHelper 3>将define的重名判断改为:projectName+DefineName 4>单个sql的超时控制 5>QueryConfiguration的配置参数化 18/12/29 1>调整IQueryService接口,添加远程超时时间 2>调整参数的配置名称 3>添加freemarker渲染的标签<@sql x=""/> 19/1/2 1>添加安全控制handler: security 并申明切面 2>更改define中statement的数据库类型为blob 19/1/3 - 4 重构 1>添加项目锁定open,lock-run,lock-un-run ,仅对服务端有效 , 对客户端无效 2>添加方法级别的权限检查 19/1/7 重构 添加project锁定日志 19/1/10 服务端能开启多种remote方式,不在互斥 19/1/11 - 21 重构 1> 添加渲染后sql的接口 2> 添加sql执行的切面,提供ExecuteAspectHandler接口进行监控 3> 项目的清除、重名验证接口 19/1/22 完成项目同步接口 19/1/23 1>向freemarker渲染方式中加入dbType 数据源类型,值是对应驱动的databaseProductName 19/1/24 1> 添加netty的监控接口 2> 当项目被完全锁定时,数据源也会被锁定,不会被选择 19/1/25 1> 引入metrics 2> 添加远程的项目监控,调用名、平均时间、最慢时间(最近一分钟)、失败次数、总调用次数、最后执行时间 3> 添加项目操作异常日志 19/1/27 1> 客户端连接通知 2> 完善监控,无测试 19/1/28 重构 1> 添加分页PaginationStatementHandler申明方式实现 2> 完成监控,待页面对接 19/1/29 完善QueryCenterHelper,添加反序列化 ### 重构 18/12/19 - 21 1>调整项目结构 2>将客户端和服务端的starter分开管理,防止引入不必要的jar包 18/12/25 抽出remoteHandler(远程调用处理), 客户端与服务端的远程调用接口化 19/1/4 重新将系统与用户挂钩 19/1/7 project Name 将唯一且不能更改 19/1/11 - 21 (2.0-SNAPSHOT) 1> 添加sql池概念, sql存在于一个公共的池中, sql不再主动关联项目 2> 添加版本概念, 一个sql定义拥有多个版本的实际执行对象 3> 添加标签概念, sql可以拥有多个标签 4> sql池中重名判断: 标签名.定义名 5> 项目需要去sql池中拉取自己需要的sql, 并可以设置别名, 版本, 数据源 6> 项目中重名判断:别名.定义名 7> 移除ServerService, 将导入、导出合并到IQueryProjectService 8> 将connectionFactory获取connection改为使用QuerySource,将QuerySource的equals改为id 9> 调整部分代码结构 10> 升级版本 2.0-SNAPSHOT 19/1/23 添加执行流程上下文概念 19/1/24 添加query-monitor模块:对服务端进行监控 19/1/8 添加query-admin-server模块:对服务端进行监控 ### DEBUGS 18/12/24:项目、定义新增修改时添加对name的唯一检查 18/12/25:项目新增时抛出已存在的异常 18/12/26: 配置集合类型配置属性时使用List接收错误,改为Array 18/12/28: 没有使用defineName的模糊查询 19/1/7:project修改Name时,定义没有进行对应的修改. 将project Name改为不可修改 19/1/23:当渲染方式为问号时,不会预先检查参数个数 ### Test 19/1/23: 2.0版本初测 - success ### TODO 添加dc渲染方式