EasyExcel读取文件-同步处理数据
2019-12-04 08:45:13来源:博客园 阅读 ()
EasyExcel读取文件-同步处理数据
读取代码
// 前端传过来的文件
MultipartFile file;
InputStream inputStream = file.getInputStream();
// 读取excel数据,边读取边处理;
EasyExcel.read(inputStream, ImportSkuIdList.class, new SkuIdExceListener(sendCouponCusRecordService)).sheet().doRead();
解析对象
public class ImportSkuIdList{
@ExcelProperty(index = 0)
/** 商品编号*/
private Long skuId;
// 省略get set
....
}
Listener
public class SkuIdExceListener extends AnalysisEventListener<ImportSkuIdList> {
private static final Logger LOGGER = LoggerFactory.getLogger(SkuIdExceListener.class);
// spring的方式需要通过构造函数传进来
private SendCouponCusRecordService sendCouponCusRecordService;
/**
* 每隔100条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 100;
private volatile int totalCount = 0;
List<ImportSkuIdList> list = new ArrayList<>();
/**
* 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
*
*/
public SkuIdExceListener(SendCouponCusRecordService sendCouponCusRecordService) {
this.sendCouponCusRecordService = sendCouponCusRecordService;
}
/**
* 这个每一条数据解析都会来调用
*
* @param data
* one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(ImportSkuIdList data, AnalysisContext context) {
totalCount ++;
list.add(data);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (list.size() >= BATCH_COUNT) {
dealData(context);
// 存储完成清理 list
list.clear();
}
}
/**
* 所有数据解析完成了 都会来调用
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
dealData(context);
LOGGER.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void dealData(AnalysisContext context) {
LOGGER.info("当前正在处理第[{}]行数据,本次处理[{}]条数据,总共有:{}条数据",context.readRowHolder().getRowIndex(),list.size(),totalCount);
// 实际处理逻辑
sendCouponCusRecordService.dealUploadData(list);
}
}
原文链接:https://www.cnblogs.com/ngrzr/p/11982697.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Hive安装、配置和使用
- Spring Boot 实现配置文件加解密原理 2020-06-08
- Java跨平台原理(字节码文件、虚拟机) 以及Java安全性 2020-06-07
- 【Java-jxl插件】【Excel文件读写报错】jxl.read.biff.BiffE 2020-06-07
- IDEA下Maven的pom文件导入依赖出现Auto build completed wit 2020-06-07
- Java中jar包获取资源文件的方式 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash