JeecgBoot项目的理解使用心得和改进建议

Posted KOMA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JeecgBoot项目的理解使用心得和改进建议相关的知识,希望对你有一定的参考价值。

JeecgBoot介绍

JeecgBoot是一款基于代码生成器的低代码开发平台,零代码开发!前端采用Ant Design&Vue,后端集成了SpringBoot2.x,Mybatis-plus,安全框架为Shiro,JWT。相对其他开源项目比较出色的是在线配置表单、在线配置报表、在线图表设计、在线设计流程、在线设计表单,极大的提高了开发效率,另外,jeecg-boot拥有强大的代码生成逻辑,相对于其他开源框架来说,jeecg-boot的代码生成能用于开发较复杂的联表查询而不是只能实现单表查询的简单逻辑。

jeecg-boot使用心得

  1. JeecgBoot第一次使用给我的感觉是配置比较简单,简单配置数据库和redis,一键启动项目,针对项目部署(war包部署、jar包部署、docker部署等等)有详细的文档,项目的运行、部署基本上遇不到问题;在数据库方面,表名命名比较规范,每张表都有del_flag、create_time、create_by、update_time、update_by五个字段,全方位记录表的数据迁移;
  2. JeecgBoot项目监控比较完善,有路由网关监控、定时任务监控、redis监控、日志监控、数据日志监控、性能监控、SQL监控等等,可以实时显示项目情况,提前预判项目宕机风险,提高项目运维水平;
  3. JeecgBoot有个比较好的细节,就是系统通告系统用管理—系统通告界面,在新增系统通告的时候,编辑通告具体内容能把通告内容进行排版,方便公司使用,发出的通告看起来正规一点;
  4. JeecgBoot集成了多租户模式,我们都知道多租户有三种实现模式,一是基于tenant_id隔离数据,二是基于Schema隔离(oracle支持较好),三是独立数据库隔离(安全性最高);JeecgBoot使用的是开发难度最高但资源消耗最少的tenant_id模式隔离,具体的实现流程是登陆后查询到用户的tenant_id,将此tenant_id放入前端vuex状态树里面以便每次访问后端接口附带tenant_id,前端访问后端时,后端获取到tenant_id后注入到ThreadLocal,然后配置Mybatisplus分页插件,每次查询附带在ThreadLocal中取出的tenant_id,实现多租户数据隔离;开发新功能时应注意,需要多租户模式的表一定记得添加tenant_id字段,不需要多租户数据隔离的表或者sql一定记得配置tenantTable排除项;

    改进建议:

  5. JeecgBoot配置项比较复杂,看的眼花缭乱,让萌新看起来无从入手,解决方案:
    缩减配置项,只保留最基本的配置,其他扩展功能,例如启用短信、启用对象存储等等写在文档里,让使用者多读文档然后再来提issue或者群里问问题,这样减少开发者工作量,也让项目变得"轻量级";
  6. 我注意到JeecgBoot部分表中使用了text数据格式比如日志表的sys_data_log的data_content字段,但是入库的时候没有限制数据长度,这里会有一个风险,当我们发生一些异常数据时,text格式也装不下时既有宕机风险也会降低服务器性能;
  7. JeecgBoot使用逻辑删除本身没有问题,但是逻辑删除会跟已有逻辑冲突,比如说现有用户张三,我删除了用户张三,但是又由于某种原因需要新增张三这个用户,那么新增时就会提示用户名已存在,我认为这就是逻辑删除潜在的一个bug,解决方案:
    放弃逻辑删除,新建一张备份表,将删除的数据复制到备份表里,即避免了一些代码逻辑上的冲突也保存了数据;
    不放弃逻辑删除,逻辑删除的表新增基于时间戳的唯一字段,判断是否重复时可以查询这个字段;
  8. JeecgBoot的监控很完善但是缺乏告警功能,我本地开发时由于自己电脑硬盘比较小,磁盘占有率已经上了90%,但是监控没有任何的告警以至于如果是生产环境就会有宕机的风险;另外就是监控比较机械,例如redis的监控,没有突出我们比较重要的性能指标即instantaneous_ops_per_sec(平均每秒处理请求总数)、rejected_connections(达到max_client然后限制的连接),也没有计算出缓存命中率等等;解决方案:
    专业的事交给专业的人,建议集成prometheus,配合grafana做监控功能,利用已有grafana模板或者开发jeecgboot专用监控模板,图形显示监控指标以及配置告警,提高项目自动化运维程度
  9. 多租户的建议:
    实现租户模式配置,即配置用户的多租户模式,0无租户模式,1基于tenant_id隔离,2基于Schema隔离,3独立数据库模式;
    tenant_id隔离模式需要开发一个多租户开关,当用户关闭多租户时,前端和后端强制将tenant_id设置为1;
    Schema隔离模式最简单的办法是将Schema名称设置为有租户名;
    独立数据库模式就基于多数据源,租户用不同的数据源(与数据源主备不冲突)
    另外,租户管理的新增租户逻辑过于简单,新增租户后应该给租户初始化必要的数据,例如初始化管理员账号,基本的角色、职务、部门、数据字典等等;
  10. 关于redis的小小建议
    JeecgBoot将缓存放在redis里面,却没有缓存淘汰策略,在用户数过多的场景下会造成资源的浪费,所以我建议启用redis的缓存淘汰策略或者自己写一个LRU算法。

以上是关于JeecgBoot项目的理解使用心得和改进建议的主要内容,如果未能解决你的问题,请参考以下文章

网友心得—运行jeecgboot-vue3项目可能出现的问题

网友心得—运行jeecgboot-vue3项目可能出现的问题

OOP第四次到第六次作业总结

JeecgBoot关于websocket的改进方案

Jeecgboot-Vue3 v1.0.0 版本正式发布,基于代码生成器的企业级低代码平台

喜讯!喜讯!JeecgBoot Github超 30000 Star—这个低代码平台你还不知道吗?