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算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM