【springboot+easypoi】大数据量excel导出

01

上次写了一行代码解决导出导入,没看的小伙伴建议先看下《一行代码做Excel导入导出》,但是实际业务中遇到一个问题,如果数据里比较大的时候,例如10w+数据一次导出,就会出现卡死情况,继续看官方文档,有大数据量导出方法,实现如下

@RequestMapping("export")
public void export(HttpServletResponse response) {
        Map<String, Object> params = new HashMap<>();
        Workbook workbook = bigExcel(1, params, null, new ExportParams("海贼王", "海贼王"),         new Page<>());
        ExcelExportUtil.closeExportBigExcel();
        downLoadExcel("海贼王.xls", response, workbook);
}
private Workbook bigExcel(int pageNum, Map<String, Object> params, Workbook workbook, ExportParams exportParams, Page<SysUser> page) {
        page.setCurrent(pageNum);
        page.setSize(1000);
        page.setCondition(params);
        page = this.getData(sysUserService.queryPage(page));
        List<SysUser> users =             FastJsonUtils.toList(FastJsonUtils.toJSONString(page.getRecords()), SysUser.class);
        workbook = ExcelExportUtil.exportBigExcel(exportParams, SysUser.class, users);
        if (page.getPages() > pageNum) {
                bigExcel(pageNum + 1, params, workbook, exportParams, page);
        }
        return workbook;
}

private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" +         URLEncoder.encode(fileName, "UTF-8"));
            response.setHeader("content-Type", "application/vnd.ms-excel");
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            throw new NormalException(e.getMessage());
        }
}

原文发布于微信公众号 - 陌与尘埃(grq100296)

原文发表时间:2018-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jeremy的技术点滴

SSM项目脚手架

5194
来自专栏bboysoul

渗透测试工具(KatanaFramework)

katana是一个用python写的渗透测试框架,基于一个简单而全面的架构,供任何人来使用,修改和分享。

1381
来自专栏冷冷

Spring Security Oauth2.0 实现短信验证码登录

spring security oauth2 登录过程详解 ​ ? ​ 定义手机号登录令牌 /** * @author lengleng * @date 2...

1.1K5
来自专栏颇忒脱的技术博客

Servlet 3.1 Async IO分析

Servlet Async Processing提供了一种异步请求处理的手段(见我的另一篇文章Servlet 3.0 异步处理详解),能够让你将Http thr...

1613
来自专栏MasiMaro 的技术博文

windows 驱动开发入门——驱动中的数据结构

最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书——《独钓寒江 windows安全编程》 和...

1582
来自专栏Lambda

编程规范

领域层–编码规范 2018年4月4日14:10:38 Controller层编写规范 controller层只是负责从service层获得数据,对外暴露API接...

3716
来自专栏牛客网

网易一面面经

自我介绍 TCP三次握手和四次挥手的过程 为什么是三次握手 JDK动态代理 如果没有实现接口使用什么?(CGLIB) NIO和BIO区别 HashMap Con...

4319
来自专栏芋道源码1024

【追光者系列】HikariCP 源码分析之故障检测那些思考 fail fast &amp; allowPoolSuspension

由于时间原因,本文主要内容参考了 https://segmentfault.com/a/1190000013136251 ,并结合一些思考做了增注

2294
来自专栏JackieZheng

Spring Boot系列——AOP配自定义注解的最佳实践

AOP(Aspect Oriented Programming),即面向切面编程,是Spring框架的大杀器之一。

1602
来自专栏冷冷

Spring Security Oauth2 自定义短信验证码登录

spring security oauth2 登录过程详解 未命名文件.png 定义手机号登录令牌 /** * @author lengleng * @...

7097

扫码关注云+社区

领取腾讯云代金券