package com.chinaztt.mes.quality.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.chinaztt.mes.quality.service.QualityHw19CodeBingService; import com.chinaztt.mes.quality.service.QualityHw19GrossService; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; /** * @Auther: yy * @Date: 2023/2/22/17:52 * @Description: */ @Slf4j public class QualityHw19GrossUploadListener extends AnalysisEventListener { /** * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 10000; /** * 缓存的数据 */ private List list = new ArrayList<>();; private QualityHw19GrossService qualityHw19GrossService; public QualityHw19GrossUploadListener(QualityHw19GrossService qualityHw19GrossService) { this.qualityHw19GrossService = qualityHw19GrossService; } @Override public void invoke(QualityHw19GrossImportData qualityHw19GrossImportData, AnalysisContext analysisContext) { list.add(qualityHw19GrossImportData); // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if (list.size() >= BATCH_COUNT) { saveData(); // 存储完成清理 list list.clear(); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 这里也要保存数据,确保最后遗留的数据也存储到数据库 saveData(); } /** * 加上存储数据库 */ private void saveData() { qualityHw19GrossService.importExcel(list); } }