ClientAbortException 解决办法

解决前端导出Excel异常

今天导出excel文件遇到ClientAbortException: java.net.SocketException: Connection reset by peer。。。。然后网上查了下一大堆说明。。然后说加上这2句就行了。。

out.clear();
  out = pageContext.pushBody();我已经加了没效果。。。而且奇怪的是IE8下正常。。IE6下就报错。。然后说什么信任站点。什么弹出窗口限制。。然后都试了遍没用。。然后发现根本不是后台原因。。。而是我前台使用

<a href="javascript:void(0);" onclick="exportit()">

 

的原因。。。。我改成

<a href="#" onclick="exportit();return false;">

 

就行了。。。。。。

### 关于 EasyExcel 导出 50 万数据时出现 `ClientAbortException` 的解决方法 在使用 EasyExcel 进行大规模数据导出的过程中,当数据量达到一定规模(如 50 万条记录),可能会遇到 `ClientAbortException` 异常。该异常通常表示客户端中断了连接,可能由于网络不稳定、浏览器超时设置不足或服务器内存压力过大等原因引起[^1]。 以下是针对此问题的具体分析和解决方案: #### 1. **分批写入** 为了避免一次性加载大量数据到内存中,可以采用分页查询的方式逐步读取数据库中的数据并将其写入 Excel 文件。通过这种方式减少单次操作的数据量,从而降低内存占用和提高稳定性[^2]。 ```java // 使用 EasyExcel 提供的监听器模式实现分批写入 public void exportLargeData(String fileName, List<List<String>> data) { // 创建文件流对象 File file = new File(fileName); OutputStream out; try { out = new FileOutputStream(file); // 设置每批次写入的数量 int batchSize = 1000; // 初始化 writer ExcelWriter excelWriter = EasyExcel.write(out).build(); WriteSheet writeSheet = EasyExcel.writerSheet(0, "sheetName").build(); // 分批写入数据 for (int i = 0; i < data.size(); i += batchSize) { int end = Math.min(i + batchSize, data.size()); List<List<String>> subList = data.subList(i, end); excelWriter.write(subList, writeSheet); } // 完成写入后关闭资源 excelWriter.finish(); out.close(); } catch (FileNotFoundException e) { throw new RuntimeException("File not found exception occurred.", e); } } ``` #### 2. **优化服务端配置** 如果仍然频繁出现 `ClientAbortException`,可能是服务端未正确配置响应时间或缓冲区大小。可以通过调整 Tomcat 或其他应用服务器的相关参数来缓解这一问题[^3]。 - 修改 Tomcat 配置文件 (`server.xml`) 中 `<Connector>` 节点属性: ```xml <!-- 增大 socket timeout 和 connectionTimeout --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="600000" soTimeout="600000"/> ``` - 如果使用 Nginx 反向代理,则需同步增加其超时时间和缓存策略: ```nginx proxy_read_timeout 600s;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值