解决数据过多导出问题

我们都知道excle表格的问题是2010版之前的excle一次只能装几万条数据,在这个数据时代这根本满足不了我们的需求,所以2010版以后excle可以装一百万多条数据,在正常需求下来说是ok的

 那么我们还面临一个问题就是数据太多,时间太长会导致内存溢出,怎么办呢? 首先将直接导出改为离线导出,将数据分开导出,比如说分成两万条数据导出一次
private void threadExport(ViewPsnPrvtFundUserQO qo, CurrentUser user) throws Exception {
				// 替换查询参数
		    	//qo = replaceQuery(qo, codeType, codeNum, query, quarter, advancedPopExport);
    			SXSSFWorkbook wb = new SXSSFWorkbook(20000);
		    	// 表头样式
	            CellStyle columnTopStyle = getColumnTopStyleSXSSF(wb);
	            // 单元格样式
	            final CellStyle style = getStyleSXSSF(wb);
	            // 处理管理人导出内容
	            wb = newFundInvestmentService.fundDetailListNew(tzztype,spvsPpdmCde,qo, style, wb, columnTopStyle);
			    FileOutputStream output=new FileOutputStream(filePath);
			    // 设置打开excel默认选中的sheet页
			    /*if (!"".equals(codeType) && codeType != null){
			    	wb.setActiveSheet(Integer.parseInt(codeType) - 1);
			    }*/
			    wb.write(output);//写入磁盘  
		        output.close();
		        // 调用oltp上传附件
		        File file =new File(filePath);
		        String fileKey  =  oltpFileMetaBo.fileUpload(file, 
		        		user.getId(), FileConfig.FILE_SECRET_NONE, FileConfig.srcApp);
		        po.setFileSeevcOgnAtchId(fileKey);
		        po.setLastAlterTime(new Date());
		        // 0为导出成功
		        po.setDownloadIndc("0");
		        prvtAndAtchRltnDao.updateByPk(po);
		       
		        		prvtAndAtchRltnDao.updateByPk(deletePO);
		        		// 删除oltp文件
		        		if ("0".equals(deletePO.getDownloadIndc())){
		        			// 如果导出状态为成功删除文件,导出异常的不需要删除文件
			        		oltpFileMetaBo.fileDelete(deletePO.getFileSeevcOgnAtchId(), user.getId());
		        		}
		        	}
		        }
		        // logger.info("----------------------------------------------------------------------->"+fileKey);
		        file.deleteOnExit();
			}
        }).start();
    	return "1";
    }
	将导出分为两个部分,一个是导出一个是下载,在导出过程中重新写一个线程为不影响另一部分数据导出,最后点击下载则可以直接查看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值