多线程异步导出excel
先新建一个执行类
@Service
public class MultiService {
private static final Logger logger = LoggerFactory.getLogger(MultiService .class);
//创建一个线程池
private ExecutorService executorService = Executors.newFixedThreadPool(10); //导出结果列表的service,不是必须
@Autowired
private OemAsnyReportResultService oemAsnyReportResultService; // 数据来源的service
@Autowired
private CouponChannelStatisticService couponChannelStatisticService; public void couponStatisticExport(Map<String, Object> params) throws Exception {
if (!params.containsKey("path") ) {
//do something
return;
} //文件上传的路径
String path = params.get("path").toString()
// 异步导出
executorService.execute(new KQChannelStatisticExport(oemAsnyReportResultService, couponChannelStatisticService, logger, params,path));
} }
下面是要执行导出功能的线程
public class KQChannelStatisticExport implements Runnable { public KQChannelStatisticExport() {} public KQChannelStatisticExport(OemAsnyReportResultService oemAsnyReportResultService,
CouponChannelStatisticService couponChannelStatisticService, Logger logger, Map<String, Object> params,
String resourceServerPath) {
this.oemAsnyReportResultService = oemAsnyReportResultService;
this.couponChannelStatisticService = couponChannelStatisticService;this.logger = logger;
this.params = params;
this.resourceServerPath = resourceServerPath;
} @Override
public void run() { //执行导出excel的代码
//如果在这里获取session,有可能会报错【shiro报错There is no session with id [xxx] 】 //导出成功后可以在导出记录表新增一条记录
oemAsnyReportResultService.save();
} }
创建一个controller
@Controller
public class KQChannelStatisticController{ @Autowired
private MultiService multiService ; /**
* 统计导出
*/
@RequestMapping("/exportKQChannelStatistic")
@ResponseBody
public Map<String, Object> exportKQChannelStatistic(HttpServletRequest request) { Map<String, Object> result = new HashMap<String, Object>();
result.put("success", true); Map<String, Object> params = new HashMap<String, Object>(); // 获取参数
params = getStatParemMap(request); //这里是获取session里面的数据,写在controller里面防止报错,如果写在导出的线程中会报错【shiro报错There is no session with id [xxx] 】
params = AsynExportExcelUtil.joinSonAccount(params);
try {
multiService.kqChannelStatisticExport(params);
} catch (Exception e) {
logger.error("统计数据导出异常", e);
result.put("success", false);
}
return result;
}
}
大概流程就是这样。。。。
多线程异步导出excel的更多相关文章
- 异步导出excel
最近看园里有几篇写有关导出导入excel的博客,我正好最近在项目中也有涉及想来一起分享一下,正好整理一下自己的思路. 一.异步的方式是通过iframe来实现,代码如下: if ($('#downloa ...
- POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel
实现导出excel的思路是:前端通过ajax的post请求,到后台处理数据,然后把流文件响应到客户端,供客户端下载 文件下载方法如下: public static boolean downloadLo ...
- ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- 关于调用office com组件导出Excel
服务器环境: 环境为win2008 r2,系统为64位,程序是C#的winform.因为需要处理数据,然后生成Excel,耗时太长,就使用了多线程.winform程序是由计划任务启动,每天晚上去跑. ...
- Java 导出Excel的各种尝试
最近的一个项目比较忙,一直没时间过来跟新博客.今天过来分享一下在此项目中遇到的一个小问题:导出Excel:相信导出Excel这个功能是特别常见的,也有很多的方式.好了,不多说了,直接说说自己遇到的各种 ...
- 使用NPOI导出Excel引发异常(IsReadOnly = “book.IsReadOnly”引发了类型“System.NotImplementedException”的异常)
前言: 本人调式npoi导入.导出试用成功后,引入到项目中,导入完美运行,但是导出怎么样都看不到现在的页面,而且浏览器和后台都没有报任务错误,让人好事纳闷,后来去调式,发现在除了一个IsReadOnl ...
- java POI导出Excel文件数据库的数据
在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...
- 采用Post请求的方式提交参数并导出excel
一般情况下,我们都是采用get请求的方式导出excel.例如采用如下方式: var exportUrl = '/xxx;'; window.open(exportUrl); 导出excel所需的逻辑参 ...
随机推荐
- 数据上下文【 DnContext】【EF基础系列7】
DBContext: As you have seen in the previous Create Entity Data Model section, EDM generates the Scho ...
- 物联网框架SuperIO 2.2.9和ServerSuperIO 2.1同时更新,更适用于类似西门子s7-200发送多次数据,才能读取数据的情况
一.解决方案 二.更新内容 1.修改IRunDevice接口,把void Send(io,bytes)改成int Send(io,bytes).2.修改网络控制器,发送数据不直接使用IO实例,改为使用 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 14.序列号的设计,不重复的实现一机一码
目 录 第十四章 序列号的设计... 2 14.1 设计原则... 2 14.2 设计思想... 3 14.3 代码实现... 4 14. ...
- COLLATE匹配两表数据
MesOrd.MesNO COLLATE Chinese_Taiwan_Stroke_CI_AS = ErpSO.SoNO
- 图解ios程序生命周期
图解ios程序生命周期 应用程序启动后状态有Active.Inactive.Background.Suspended.Not running这5种状态,几种状态的转换见下图: 在AppDelegate ...
- 最快让你上手ReactiveCocoa之基础篇
前言 很多blog都说ReactiveCocoa好用,然后各种秀自己如何灵活运用ReactiveCocoa,但是感觉真正缺少的是一篇如何学习ReactiveCocoa的文章,这里介绍一下. 1.Rea ...
- [原创]Linux-day1
原创:转发务必注明出处http://www.cnblogs.com/0zcl/p/6077298.html 一.Linux的基本原则 由目的单一的小程序组成:组合小程序完成复杂任务 一切皆文件 尽量避 ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- 解决apache启动错误"httpd:Could not reliably determine..."
启动apache遇到错误:httpd: Could not reliably determine the server's fully qualified domain name [root@serv ...
- 记录一次Quartz2D学习(二)
(一)内主要就是讲了线条的绘制以及绘制状态的保存与恢复 本次就讲一些图形的画法 2 图形的绘制 2.1 三角形的绘制 :(就是绘制三条线) - (void)drawRect:(CGRect)rect ...