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.QualityHw19CodeService;
|
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 QualityHw19CodeBingUploadListener extends AnalysisEventListener<QualityHw19CodeBingImportData> {
|
|
/**
|
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
|
*/
|
private static final int BATCH_COUNT = 10000;
|
|
/**
|
* 缓存的数据
|
*/
|
private List<QualityHw19CodeBingImportData> list = new ArrayList<>();;
|
|
private QualityHw19CodeBingService qualityHw19CodeBingService;
|
|
public QualityHw19CodeBingUploadListener(QualityHw19CodeBingService qualityHw19CodeBingService) {
|
this.qualityHw19CodeBingService = qualityHw19CodeBingService;
|
}
|
|
@Override
|
public void invoke(QualityHw19CodeBingImportData qualityHw19CodeBingImportData, AnalysisContext analysisContext) {
|
list.add(qualityHw19CodeBingImportData);
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
if (list.size() >= BATCH_COUNT) {
|
saveData();
|
// 存储完成清理 list
|
list.clear();
|
}
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
|
saveData();
|
}
|
|
/**
|
* 加上存储数据库
|
*/
|
private void saveData() {
|
qualityHw19CodeBingService.importExcel(list);
|
}
|
}
|