先新建一个执行类

@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. Android Service

    一.在MainAcitivity界面启动Service  : public class MyService extends Service intent = new Intent(MainActivi ...

  2. 数据库表结构设计方法及原则(li)

    数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满 ...

  3. AngularJs最简单解决跨域问题案例

    AngularJs最简单解决跨域问题案例 2016-05-20 09:18 82人阅读 评论(0) 收藏 举报  分类: javascript(1)  作者:白狼 出处:http://www.mank ...

  4. 判断终端的js

    $(function(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAgent.match(/ip ...

  5. 缓冲区溢出利用——捕获eip的傻瓜式指南

    [译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who can't smash ...

  6. 关于jni编译32位、64位动态库(Android.mk和Application.mk文件)

    最近新项目需要编译64位的动态库,这里记录如何配置. 在jni目录下加入Android.mk和Application.mk文件. Application.mk APP_ABI := armeabi a ...

  7. Eclipse安装SVN插件

    Eclipse 安装最新SVN插件 下载地址 下载最新的Eclipse,我使用的是eclipse-jee-kepler-SR2-win32-x86_64.zip(Eclipse IDE for Jav ...

  8. Visual Studio 生成事件命令

    Visual Studio在生成项目工程前后,有时我们需要做一些特殊的操作,比如:拷贝生成的dll到指定目标下面等. 结合VS可以添加预先生成事件和后期生成事件,采用命令或bat批处理. 1.Visu ...

  9. MVC学习系列4--@helper辅助方法和用户自定义HTML方法

    在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...

  10. VMware中CPU分配不合理以及License限制引起的SQL Scheduler不能用于查询处理

    有一台SQL Server(SQL Server 2014 标准版)服务器中的scheduler_count与cpu_count不一致,如下截图所示: SELECT  cpu_count ,      ...