生產級「百萬數據導入」筆記總結
?? 生產級「百萬數據導入」筆記總結
?? 1. MultipartFile 轉本地臨時存儲
- 將上傳的 Excel 文件保存至本地臨時目錄,能及時響應前端。
?? 2. 創建導入進度
-
初始化導入任務信息:
- 導入UUID
- 階段狀態
- 總條數、成功條數、失敗條數、重復數
- 失敗文件地址(導出路徑)
-
進度信息存儲至數據庫,供前端輪詢查詢。
-
可統計當前系統同時導入中的數量,做導入頻率限制。
?? 3. 異步執行導入
- 使用線程池或 Spring 的
@Async異步方法。 - 每個任務獨立運行,避免阻塞主線程。
?? 4. 獲取總條數
- 使用 EasyExcel 首次快速解析文件,僅統計總行數。
- 為后續導入進度顯示做準備。
??? 5. 準備基礎數據
- 提前加載數據量較小的字典項、從表數據等。
- 避免重復訪問數據庫。
?? 6. 使用 EasyExcel 創建 Listener 批量解析數據
利用 EasyExcel 的
AnalysisEventListener,結合分批次邏輯,邊解析邊處理。
?? 6.1 單行解析邏輯(invoke 方法)
? 6.1.1 入參校驗
- 使用
@Valid或自定義校驗器對字段進行合法性校驗。 - 可配置化設置校驗規則(如字段長度變化通過配置文件控制,不需重啟)。
?? 6.1.2 狀態轉換
- 將 Excel 中的狀態值(如“啟用”、“停用”)轉換為系統枚舉或碼值。
?? 6.1.3 字典填充
- 將字段值映射為字典表中的值(如“男”→
1,"女"→2)。
? 6.1.4 失敗數據記錄
- 使用結構化對象保存每條失敗記錄,供后續生成失敗文件。
?? 6.2 批量處理邏輯(saveData 或自定義批次處理)
?? 6.2.1 批次數據校驗
- 按照當前批次內的主鍵/唯一字段構建
IN查詢,避免單條數據庫校驗。
?? 6.2.2 重復數據校驗
- 校驗當前文件內的重復行。
- 與數據庫中現有數據重復檢查(如唯一約束字段)。
?? 6.2.3 從表引用校驗
- 校驗外鍵字段是否能在從表中匹配。
- 比如:部門 ID 是否存在、商品分類是否正確等。
? 6.2.4 失敗數據記錄
?? 6.3 插入成功數據
- 推薦使用 MyBatis 批量
insert。 - 可結合
foreach標簽或 MyBatis Plus 批處理功能。
?? 6.4 實時記錄導入進度
- 每批次處理后更新任務狀態及計數信息。
- 提供任務狀態查詢接口供前端輪詢顯示。
?? 7. 生成失敗文件
- 使用 EasyExcel 或 Apache POI 導出失敗記錄 Excel 文件。
- 每條記錄包含失敗原因,方便用戶查看并修正數據。
- 提供導出文件下載鏈接或接口。
- 失敗文件應該與導入文件格式模板相同,可支持修改后直接導入。
?? 8. 導入結果推送(可考慮)
-
導入完成后通過 WebSocket 或郵件/消息通知用戶;
-
可對接企業微信、釘釘機器人進行導入完成推送。
浙公網安備 33010602011771號