spring boot下载大数量文件导致nginx崩溃解决方案

参考资料:http://blog.csdn.net/tsytdhs163/article/details/7889641

情况:

公司后台查询数据,用户反应下载超过1各月的数据时,页面就会崩溃,报错为nginx 504超时

解决办法:

按照以上链接的思路,主要是在写入excel的时候,每一小段时间久向nginx返回信息,与客户端建立长连接
然而考虑到我们后台的架构,必须将生成excel的生成过程改写到controller中。
另外文中的response.getWriter().write功能和spring boot的框架冲突,运行过程中会报出:
getWriter() already been used 的错误,经过google,使用getOutputStream()代替即可,通时write的内容改为getBytes():

response.getOutputStream().write(new StringBuffer().append(fileName).toString().getBytes());
response.flushBuffer();

此处write的内容应该生成文件的url,保持长连接的代码也一样:

response.getOutputStream().write(" ".getBytes());
response.flushBuffer();

页面通过ajax和layer.load()创建等待的遮罩,在ajax成功返回后再次submit表单:

image.png

注意此处由于url的文件后缀的“.”直接带url参数会导致无法被服务端识别完整的url,因此需要将前后缀分开提交。
最后根据url用IOStream下载文件即可。

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,150评论 19 139
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 33,127评论 24 1,003
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 81,924评论 21 356
  • 1、感恩健康的犒赏得以存活,谢谢!谢谢!谢谢! 2、感恩所获金钱,付清全部账单,谢谢!谢谢!谢谢! 3、感恩所触及...
    皮儿米阅读 372评论 0 0
  • 凌晨四点零八分 ____这只是一个无眠的时刻 鸟儿忘记归巢了在天空盘旋 傍晚的阳光开始渐渐隐...
    egg128_3918阅读 579评论 0 1

友情链接更多精彩内容