当前位置: 首页 > news >正文

本地的上海网站建设公司网站图片描述怎么写

本地的上海网站建设公司,网站图片描述怎么写,商业空间设计效果图,做网站什么字体比较好看1.遇到的问题 项目中遇到导入6w条数据#xff0c;之前用的poi#xff0c;感觉很慢#xff0c;这时查询了下阿里巴巴提供了开源的easyExcell很好用。 EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 2.读写速度 64M内存20秒读取75M(46W行25列)的Excel#x… 1.遇到的问题 项目中遇到导入6w条数据之前用的poi感觉很慢这时查询了下阿里巴巴提供了开源的easyExcell很好用。 EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 2.读写速度 64M内存20秒读取75M(46W行25列)的Excel3.0.2版本 3.代码实现 代码出处读Excel | Easy Excel 最简单的读取对象 Getter Setter EqualsAndHashCode public class DemoData {private String string;private Date date;private Double doubleData; } 最简单的监听器  // 有个很重要的点 DemoDataListener 不能被spring管理要每次读取excel都要new,然后里面用到spring可以构造方法传进去 Slf4j public class DemoDataListener implements ReadListenerDemoData {/*** 每隔5条存储数据库实际使用中可以100条然后清理list 方便内存回收*/private static final int BATCH_COUNT 100;/*** 缓存的数据*/private ListDemoData cachedDataList ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);/*** 假设这个是一个DAO当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。*/private DemoDAO demoDAO;public DemoDataListener() {// 这里是demo所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数demoDAO new DemoDAO();}/*** 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来** param demoDAO*/public DemoDataListener(DemoDAO demoDAO) {this.demoDAO demoDAO;}/*** 这个每一条数据解析都会来调用** param data one row value. Is is same as {link AnalysisContext#readRowHolder()}* param context*/Overridepublic void invoke(DemoData data, AnalysisContext context) {log.info(解析到一条数据:{}, JSON.toJSONString(data));cachedDataList.add(data);// 达到BATCH_COUNT了需要去存储一次数据库防止数据几万条数据在内存容易OOMif (cachedDataList.size() BATCH_COUNT) {saveData();// 存储完成清理 listcachedDataList ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}/*** 所有数据解析完成了 都会来调用** param context*/Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 这里也要保存数据确保最后遗留的数据也存储到数据库saveData();log.info(所有数据解析完成);}/*** 加上存储数据库*/private void saveData() {log.info({}条数据开始存储数据库, cachedDataList.size());demoDAO.save(cachedDataList);log.info(存储数据库成功);} } 持久层自己实现批量插入也可以使用多线程插入。 异步线程配置 # 异步线程配置 # 核心线程数 async:executor:thread:core_pool_size: 10# 最大线程数max_pool_size: 100# 任务队列大小queue_capacity: 20# 线程池中线程的名称前缀name:prefix: kc-async-service-# 缓冲队列中线程的空闲时间keep_alive_seconds: 100await_termination_seconds: 60 /*** 假设这个是你的DAO存储。当然还要这个类让spring管理当然你不用需要存储也不需要这个类。**/ public class DemoDAO {public void save(ListDemoData list) {// 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入} } 代码 /*** 最简单的读* p* 1. 创建excel对应的实体对象 参照{link DemoData}* p* 2. 由于默认一行行的读取excel所以需要创建excel一行一行的回调监听器参照{link DemoDataListener}* p* 3. 直接读即可*/Testpublic void simpleRead() {// 写法1JDK8 ,不用额外写一个DemoDataListener// since: 3.0.0-beta1String fileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 这里默认每次会读取100条数据 然后返回过来 直接调用使用数据就行// 具体需要返回多少行可以在PageReadListener的构造函数设置EasyExcel.read(fileName, DemoData.class, new PageReadListenerDemoData(dataList - {for (DemoData demoData : dataList) {log.info(读取到一条数据{}, JSON.toJSONString(demoData));}})).sheet().doRead();// 写法2// 匿名内部类 不用额外写一个DemoDataListenerfileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, DemoData.class, new ReadListenerDemoData() {/*** 单次缓存的数据量*/public static final int BATCH_COUNT 100;/***临时存储*/private ListDemoData cachedDataList ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);Overridepublic void invoke(DemoData data, AnalysisContext context) {cachedDataList.add(data);if (cachedDataList.size() BATCH_COUNT) {saveData();// 存储完成清理 listcachedDataList ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}Overridepublic void doAfterAllAnalysed(AnalysisContext context) {saveData();}/*** 加上存储数据库*/private void saveData() {log.info({}条数据开始存储数据库, cachedDataList.size());log.info(存储数据库成功);}}).sheet().doRead();// 有个很重要的点 DemoDataListener 不能被spring管理要每次读取excel都要new,然后里面用到spring可以构造方法传进去// 写法3fileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();// 写法4fileName TestFileUtil.getPath() demo File.separator demo.xlsx;// 一个文件一个readertry (ExcelReader excelReader EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build()) {// 构建一个sheet 这里可以指定名字或者noReadSheet readSheet EasyExcel.readSheet(0).build();// 读取一个sheetexcelReader.read(readSheet);}} 指定列读取例子 Getter Setter EqualsAndHashCode public class IndexOrNameData {/*** 强制读取第三个 这里不建议 index 和 name 同时用要么一个对象只用index要么一个对象只用name去匹配*/ExcelProperty(index 2)private Double doubleData;/*** 用名字去匹配这里需要注意如果名字重复会导致只有一个字段读取到数据*/ExcelProperty(字符串标题)private String string;ExcelProperty(日期标题)private Date date; } 4.总结 EasyExcell效率很高使用这种方式性能提高很多。
http://www.w-s-a.com/news/704496/

相关文章:

  • 哪个网站做视频赚钱万科
  • 莆系医疗网站建设wp如何做网站地图
  • 网站建设应急处置方案团购网站 备案问题
  • 网站建设 岗位职责浙江中天建设集团有限公司网站
  • 西海岸建设局网站用wordpress建站学什么
  • 网站静态和动态学校网站建设流程步骤
  • 做群头像的网站在线怎么做俄语网站
  • 西安网站定制开发国内cms推荐
  • windows网站建设教程视频教程wordpress默认用户头像
  • 做网站需要什么软件wordpress会员邮件通知
  • 技术支持网站合肥网站搭建
  • 无为网站设计免费制作企业网站平台
  • 社交网站第一步怎么做房屋装修效果图用什么软件
  • 企业网站 批量备案合肥 网站建设
  • 如何提高网站索引量室内设计师之路网站
  • ps怎么做响应式网站布局图现在做网站都是怎么做的
  • 导购 网站模板网站主题选择
  • 毕业设计医院网站设计怎么做郑州铭功路网站建设
  • 网站根域名是什么php做商城网站步骤
  • 建设网站的那个公司好网站建设万首先金手指12
  • 广东民航机场建设有限公司网站网站开发后端用什么
  • 做风帆网站需要多少钱越野车网站模板
  • 如何做网站平台销售用狗做头像的网站
  • 宝安电子厂做网站美食网页设计的制作过程
  • 网站logo提交学网站开发技术
  • 跨境电商平台网站建设广州西安官网seo推广
  • 我和你99谁做的网站小程序制作第三方平台
  • 建设银行网站用户名鹤岗网站seo
  • 做一元夺宝网站需要什么条件西安市做网站的公司
  • 零基础建设网站教程郑州做网站推广价格