sanri-tools-maven 是一个开源的用于企业开发的工具包,重点想解决项目开发中一些比较麻烦的问题
目前已经提供一些常用的工具,读者也可以开发自己的工具注册进来 ,欢迎 pr 或者提 issue
- 轻量级,只依赖于文件系统,无权限管理, 读者可以自行开发权限模块
- 多模块,可插拨设计,只加载想要的工具
- 做数据监控和数据的可视化工具,这个可以直接看到数据明文,而不是乱码
- 尽量做到开发中用到的中间件一体式监控和数据查看
- 欢迎来提交 issue 或者 pr , 不要在评论中说还有一堆问题之类的, 因为你这样说我也不知道哪里有问题, 评论中也没办法截图, 加入官方群来说也行
- 本工具适用群体是开发, 不是运维监控, 也不适用于监控生产数据
- 对于学习者的意义
- 项目中有一些不错的算法, 后面我会将有算法的写在对应模块的 resources/README.MD 中, 大家有兴趣可以查看,并且可以提供更优的算法给我(提交 pr)
- 一些插件的 api 的使用
- 中间件的一些大致部署结构和细节
- 2021.11.09 增加 Redis 树形 Key
- 2021.11.01 增加 git 增量工具
- tools-core
- 类加载管理 上传类 zip , class, java 文件到类加载器
- 连接管理 创建 zookeeper, redis, database, kafka 等连接
- 文件管理 系统的临时文件和配置文件的管理,提供临时文件下载功能
- 插件管理 插件注册,提供给前端可访问的插件,做了一个监控指标,根据插件点击次数和最后访问时间来排序插件
- 数据管理 可以给 class 随机生成数据,使用正则表达式生成数据,和爬网站数据功能
- tools-serializable
- 提供序列化,反序列化等基础功能
- tools-zookeeper
- zookeeper 连接的子节点,acl权限,节点数据,节点元数据,删除节点,写入数据
- 路径收藏功能,方便下次直接查找
- tools-redis
- 支持集群,主从和单机,展示节点主机,端口,角色,父节点; 集群可以展示槽位分配
- key 列表查询,可以查询集群所有节点,hashKey 列表查询,key 的长度,ttl , type 展示
- 批量删除 key , 根据前缀删除 key(这个在树状 KEY 标签页提供支持)
- 查询某个 key 的数据,可以根据序列化和类加载器展示成友好的方式,支持(string,hash,list,set,zset)
- 在线求 set 类型的数据交集,并集,差集
- 监控每一个节点使用的内存信息
- 监控每一个节点的连接数,主机占用连接数信息,杀掉某个连接
- 监控每一个节点的慢查询
- 树状结构展示 Key 列表, 这个对于用习惯了 RDM 的人可能是个必须项,目前我的工具也提供了支持; 但其实这种展示结构只能处理当 key 数量比较少的时候, RDM 也只是 scan 了前 10000 条数据来展示树,对于生产环境还会卡死
- 注: 快速搜索(现改名单KEY)功能不一定快速, 做这个功能的目的是和精确数量来比较的,如果要精确数量, 那我每次 scan 的 limit 参数必须较正, 一次搜索的数量就少了, 但如果不需要精确数量的话 , 我可以一次 limit 10000 条,可以加快搜索速度 , 这个适用于用户知道了很精确的 key ,对于一个有 100 万 key 的集群来说搜索会快很多
- tools-kafka
- 消费组列表,删除消费组,消费组消费的主题列表,消费组消费主题某分区消费数据情况,消费组消费主题某分区附近的数据
- 主题列表,主题尾部数据,创建主题,删除主题,模拟数据发送
- 主题数据实时监控,brokers 列表
- 所有的数据消费或监控都可以使用序列化配合类加载器来展示数据明文
- JMX 监控,详情见类 BrokerTopicMetrics
- tools-database
- 数据库元数据 catalog,schema,表,列,索引,主键 查询和搜索
- 扩展元数据 表类型(字典表,配置表,业务表),表关联关系设置,展示和搜索
- 数据库文档生成和下载
- 使用模板生成代码,组合模板成方案生成代码
- 使用 sql 预览数据库数据和 excel 导出,导入 excel 数据 ,表随机数据生成
- nacos,diamond 等依赖于数据库的配置数据可以直接展示
- 强大的搜索功能,可以使用表名,列名,注释,表标记,schema 来搜索表
- 随机数据插入,在压力测试时可以用 , 可以用 spring 表达式,正则,关联另一张表来随机生成表数据
- tools-mybatis
- 上传 mapper 文件,配合类加载器,可以找到所有的 mapper 文件中的所有 statementId
- 根据 statementId 可以知道当前 statementId 所必传的参数
- 传入必传参数,和数据库连接,可以直接调用 statementId, 得到 sql 语句 ,这里的数据库连接引用数据库模块的连接名
- tools-swagger-doc
- 将 swagger 的文档生成更美观的文档并提供下载文档
- 注意: 这个工具尚不完善,输入框填入网络请求中 json 数据那个链接
- tools-dubbo
- 依赖于 zookeeper 模块,得到 dubbo 的提供者,获取提供的方法,并可以执行调用
- tools-name
- 想要给某个方法取名,但一下子想不到合适的名字,可以用这个工具帮你取名
- 支持设置业务词,ik 分词,英语翻译
- tools-soap
- 支持 soap 调用
- tools-websocket
- 主要是给其它模块提供前端推送数据功能
- tools-quartz
- 触发器和任务列表,cron 表达式以及后面 10 次的任务执行时间
- 触发,停止,恢复,需要配合类加载器
- 新建,移除任务,需要配合类加载器
- tools-mongodb
- 数据库列表,集合列表
- 数据查询
- tools-elasticsearch
- 数据监控
- 数据查询
- tools-tcp
- tcp-client 用于设备调试时,给服务端发送数据
- tcp-server 用于设备调试时,模拟服务端
- tools-patchcode
- 需要发代码增量包时, 可以进行编译,拉取最新包,并打增量包
- 依赖于本地 maven 编译
- 重要说明:
- 当前只支持 git 仓库, 例: (gitlab,github,gitee),
- 编译的实时展示将消耗大量浏览器占用内存, 编译大型项目时需要将编译实时窗口关闭在后台控制台看输出结果
- 当 下载仓库或者 pull 出现冲突之类的问题时, 需要手动操作, 目录在 $tmp/gitrepositorys/$group/$repository
目前已经经过公司实践并且功能强大的模块有
- tools-redis
- tools-kafka
- tools-database
- tools-patchcode
计划加强的模块有
- tools-tcp
- tools-mybatis
其它计划模块
欢迎网友提供点子
对于一个工具来说,使用文档是比较重要的,使用文档放到每个模块的 resources 中, 然后通过 PluginManager 注册进来
在首页会读取使用文档,并展示给用户,你可以在 md 文件中做外链,以便链接外部说明文档
- 连接管理中的模块名必须是固定的,只能取 database,kafka,redis,zookeeper,mongo,git 具体可以在 ConnectService.moduleParamFactory() 方法中查看
- 数据库类型只支持 mysql,postgresql,oracle 具体可以在 DatabaseConnectParam 中查看
- 类加载器 "上传 dto" 可以是单类文件,无目录结构,java 实体类,但不能是标准结构的; "上传标准 dto" 只能是标准结构类文件
- 新建连接是有模板的,如果模板没有加载出来,检查模块名是否正确,可以重新打开来加载配置模板
tools-core
|- tools-serializable
tools-zookeeper
|- tools-core
tools-kafka
|- tools-zookeeper
|- tools-websocket
tools-dubbo
|- tools-zookeeper
tools-redis
|- tools-core
tools-database
|- tools-core
tools-swagger-doc
|- tools-core
tools-mybatis
|- tools-database
tools-name
|- tools-core
tools-soap
|- tools-core
- issue 因为 tools-name 模块中的 ik 分词在中央仓库是没有的,所以你如果不需要这个模块,可以直接删除此模块, 或者你想要这个模块可以安装 ik 分词依赖,包和安装脚本都在 tools-name/src/main/resources 中
解决 ik 分词问题后,就可以直接运行 tools-console 中的 com.sanri.tools.Application 启动 ,标准的 springboot 项目
https://gitee.com/sanri/sanri-tools-maven/releases
2.0.0 版本之前,下载的 release 为 tomcat ,双击 bin/start.bat 启动
@since 2.0.0 java -Xms256m -Xmx256m --data.path.config=配置文件存储路径 --data.path.tmp=临时文件存储路径 -jar sanritools.jar
@since 2.2.0 java -Dloader.path=sanritoolslib --data.path.config=配置文件存储路径 --data.path.tmp=临时文件存储路径 -Xms256m -Xmx256m -jar sanritools.jar
sanritoolslib 下载地址
如何查看当前正在开发的工具版本
当前工具的版本在 tools-console/src/main/resources/version 文件中, 各模块的版本后面会写在 pluginDto 中注册进来
这种方式适合于后端人员需要调试工具时使用;
- 在 tools-console/src/main 文件夹中建一个目录 webapp ,并标识为 web
- 解压 tools-console/webapp.zip 放到上一步建的 webapp 目录
- 运行 tools-console 中的 Application.main() , 就可以做后台的开发调试了
- 访问路径 http://localhost:8084
注: tools-console 的 webapp.zip 是一个比较旧的版本(20201211),后面的打包版本会放在前端项目Release
-
创建连接
- 基础数据->连接管理->新模块( 可以创建 database, redis, kafka, mongo,zookeeper, git) 等模块
- 在模块里新建连接, 这个连接是有模板的, 其中, 数据库连接中的 dbType 可以是 (mysql, postgresql, oracle ) 之中的一种
-
重要参数说明(默认情况, 可以自行修改; 使用工具前一定要先行创建这些目录, 否则无法使用)
配置目录: /tmp/sanritools/configs
临时目录: /tmp/sanritools/temp
外部lib: /tmp/sanritools/libs
日志目录: /tmp/sanritools/logs
后端端口: 8084
- 新增一个模块,如 tools-xxx ,然后依赖于 tools-core
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>tools-core</artifactId>
<version>${project.version}</version>
</dependency>
- 然后将模块使用插件管理注册进来
@Autowired
private PluginManager pluginManager;
@PostConstruct
public void register(){
pluginManager.register(PluginDto.builder().module("tools-xxx").name("main").build());
}
module 在前端是做为一级菜单,然后 name 是二级菜单 , 同一个模块下可以注册多个功能项, 插件的开发和工作中开发 controller 没有区别
- 将开发的模块集成进工具 在 tools-console/pom.xml 中添加
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>tools-xxx</artifactId>
<version>${project.version}</version>
</dependency>
工具使用了更方便的单元测试,直接发送 http 请求来测试,所有的单元测试都在 requests/全部 http 请求.http 中
官方前端 https://gitee.com/sanri/sanritoolsvue
前端美图 https://gitee.com/sanri/sanri-tools-maven/issues/I1UEJR
如果对这个前端不满意,可以使用接口进行自定义开发, 本项目只是提供数据服务
数据库文档生成,每个公司要求的模板都不一样,可以自己扩展,使用 jdbcService 可以拿到你想要的元数据,然后想怎么生成,全靠你自己, 我这里提供了三个示例
- 生成 markdown 的 ,使用 database-doc.md.ftl 模板
- 生成 html 的,使用 database-doc.html.ftl 模板
- 生成 excel 的,实现类在 MetadataControllerShow.generate() 方法中
做为一个sanri工具最早提供的功能,这个功能在网上有很多类似的实现,基本可以分为两类,一类是直接帮你生成固定的模式,只适应于它的项目模板,一类是提供使用模板生成的方式 这两种方式各有利弊,为了省事,一般使用直接生成可用的代码,如果需要二次开发最好是使用模板生成,这里我两种都有提供
尽管我已经提供了相当多的模板,但还是有需要自定义模板代码生成的用户,不可能全部穷尽,这里我把可以给到模板中的元数据结构,模板目前只支持 freemarker
- 通用数据,不管是 javaBean、模板代码、还是项目构建都会有这个数据
author : 当前作者,取计算机名
date : 当前日期 yyyy-MM-dd
time : 当前时间 HH:mm:ss
- javaBean 构建时数据
bean : 当前表对应的 java 实体类信息 ,引用类 JavaBeanInfo
beanConfig : bean 的配置信息,引用类 JavaBeanBuildConfig
table : 表元数据信息,引用类 TableMetaData
- 模板代码生成(每一个模板都是针对单张表的生成)
bean : 当前表对应的 java 实体类信息 ,引用类 JavaBeanInfo
table : 表元数据信息,引用类 TableMetaData
codeConfig : 如果是模板代码生成 ,引用 CodeGeneratorParam
- 项目构建数据
tables : 表元数据信息,引用类 TableMetaData:List
beans : 当前表对应的 java 实体类信息 ,引用类 JavaBeanInfo:List
config : 如果是项目构建,引用 CodeGeneratorConfig
dataSource : 数据源,引用类 ConnectionMetaData
- Git仓库:https://gitee.com/sanri/sanri-tools-maven
- 官方前端:https://gitee.com/sanri/sanritoolsvue
- 技术讨论、二次开发等咨询、问题和建议,请移步到微信群,我会在第一时间进行解答和回复
- 如需关注项目最新动态,请Watch、Star项目,同时也是对项目最好的支持
- 微信扫码并关注我,获得项目最新动态及更新提醒,拉你进入微信技术群
- 如果有需要支持的中间件,可以提交 pr, 或者微信联系我