先新建一个执行类

@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的更多相关文章

  1. 异步导出excel

    最近看园里有几篇写有关导出导入excel的博客,我正好最近在项目中也有涉及想来一起分享一下,正好整理一下自己的思路. 一.异步的方式是通过iframe来实现,代码如下: if ($('#downloa ...

  2. POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel

    实现导出excel的思路是:前端通过ajax的post请求,到后台处理数据,然后把流文件响应到客户端,供客户端下载 文件下载方法如下: public static boolean downloadLo ...

  3. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  4. MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  5. 关于调用office com组件导出Excel

    服务器环境: 环境为win2008 r2,系统为64位,程序是C#的winform.因为需要处理数据,然后生成Excel,耗时太长,就使用了多线程.winform程序是由计划任务启动,每天晚上去跑. ...

  6. Java 导出Excel的各种尝试

    最近的一个项目比较忙,一直没时间过来跟新博客.今天过来分享一下在此项目中遇到的一个小问题:导出Excel:相信导出Excel这个功能是特别常见的,也有很多的方式.好了,不多说了,直接说说自己遇到的各种 ...

  7. 使用NPOI导出Excel引发异常(IsReadOnly = “book.IsReadOnly”引发了类型“System.NotImplementedException”的异常)

    前言: 本人调式npoi导入.导出试用成功后,引入到项目中,导入完美运行,但是导出怎么样都看不到现在的页面,而且浏览器和后台都没有报任务错误,让人好事纳闷,后来去调式,发现在除了一个IsReadOnl ...

  8. java POI导出Excel文件数据库的数据

    在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...

  9. 采用Post请求的方式提交参数并导出excel

    一般情况下,我们都是采用get请求的方式导出excel.例如采用如下方式: var exportUrl = '/xxx;'; window.open(exportUrl); 导出excel所需的逻辑参 ...

随机推荐

  1. OA办公自动化系统源码

    最新extjs6富客户端,.net平台开发,sql server数据库,基础权限人员基础平台,可方便二次开发,使用EF为orm,autofac为ioc,Castle为基础的aop,实现常用OA系统功能 ...

  2. [Winform] DataGridView 中 DataGridViewComboBox 的可编辑

    在 DataGridView 中设置的 DataGridViewComboBox,默认是不可编辑的,即使将其列属性 DisplayStyle 设置成 ComboBox 或其他,也无法编辑: 故作如下处 ...

  3. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(四)

    (四)搭建Website Cloud环境 1安装CONTROLLER主机 在开始安装Web site Cloud之前,读者应该对该服务的拓扑结构有个大概了解. 如图: Controller是非常重要的 ...

  4. C#开发微信门户及应用(35)--微信支付之企业付款封装操作

    在前面几篇随笔,都是介绍微信支付及红包相关的内容,其实支付部分的内容还有很多,例如企业付款.公众号支付或刷卡支付.摇一摇红包.代金券等方面的内容,这些都是微信接口支持的内容,本篇继续微信支付这一主题, ...

  5. 9.2.4 .net core 通过ViewComponent封装控件

    我们在.net core中还使用了ViewComponent方式生成控件.ViewComponent也是asp.net core的新特性,是对页面部分的渲染,以前PartialView的功能,可以使用 ...

  6. ZooKeeper原理及使用

    ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby.今天这篇 ...

  7. Mac下安装ElasticSearch

    简单记录一下安装ES的过程,给小小白们提供一下参考: 下载安装包 https://www.elastic.co/downloads/elasticsearch建议下载2.3.2版本,最新的5.0.0版 ...

  8. datagrid与webAPI的数据交互(ef mvc )

    datagride自带分页工具,当使用分页工具的时候,初始化datagride或者带数据提交到API里面时,会以Json对象的形式将数据传递到API控制器里面,当没有过滤条件或者请求参数.和提交参数的 ...

  9. 【大前端之前后分离01】JS前端渲染VS服务器端渲染

    前言 之前看了一篇文章:@Charlie.Zheng Web系统开发构架再思考-前后端的完全分离,文中论述了为何要前后分离,站在前端的角度来看,是很有必要的:但是如何说服团队使用前端渲染方案却是一个现 ...

  10. InfoPath错误,此文档库已被重命名或删除

    在使用InfoPath发布表单,发布到SharePoint服务器报错,如下介绍: 环境:Windows 2012 DateCenter + Sql 2012 + SharePoint 2013 + O ...