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表单:

spring boot下载大数量文件导致nginx崩溃解决方案_第1张图片
image.png

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

image.png

你可能感兴趣的:(spring boot下载大数量文件导致nginx崩溃解决方案)