easyExcel/poi导出文件Can not close IO,This archive contains unclosed entries

这篇具有很好参考价值的文章主要介绍了easyExcel/poi导出文件Can not close IO,This archive contains unclosed entries。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

easyExcel或poi导出文件时发生com.alibaba.excel.exception.ExcelGenerateException: Can not close IO,或者java.io.IOException: This archive contains unclosed entries.此情况只会发生导出一定数据量时,导出数据量很少时无此情况,检查发现服务磁盘、内存均富余可用,文件权限操作无问题

异常

异常堆栈

com.alibaba.excel.exception.ExcelGenerateException: Can not close IO.
	at com.alibaba.excel.context.WriteContextImpl.finish(WriteContextImpl.java:420)
	at com.alibaba.excel.write.ExcelBuilderImpl.finish(ExcelBuilderImpl.java:99)
	at com.alibaba.excel.ExcelWriter.finish(ExcelWriter.java:143)
	at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:63)
	at com.otc.por.common.file.excel.ExcelUtils.exportByIncludeOrExclude(ExcelUtils.java:799)
	at com.otc.por.monitor.service.impl.TransServiceImpl.exportTranstrd(TransServiceImpl.java:228)
	at com.otc.por.monitor.service.impl.TransServiceImpl.export(TransServiceImpl.java:186)
	at com.otc.por.monitor.controller.TransController.export(TransController.java:71)
	at com.otc.por.monitor.controller.TransController$$FastClassBySpringCGLIB$$843dbfde.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
	at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:119)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
	at com.otc.por.monitor.controller.TransController$$EnhancerBySpringCGLIB$$7e15202d.export(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.IOException: This archive contains unclosed entries.
	at org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream.finish(ZipArchiveOutputStream.java:467)
	at org.apache.poi.xssf.streaming.SXSSFWorkbook.injectData(SXSSFWorkbook.java:419)
	at org.apache.poi.xssf.streaming.SXSSFWorkbook.write(SXSSFWorkbook.java:959)
	at com.alibaba.excel.context.WriteContextImpl.finish(WriteContextImpl.java:381)
	... 67 common frames omitted

引发原因

根据源码分析发现是有其他线程提前关闭了请求或IO导致生成的Excel临时文件不能正确关闭;
系统部署了网关服务,由于网关服务ribbon ReadTimeout配置错误导致请求
每次超过1秒即会被熔断(ribbon超时默认1s),熔断将会导致请求被提前关闭从而导致response与outputStream被提前关闭,因而导致生成的本地Excel临时文件无法被正确写入response以及正确关闭。

解决

修改网关各类超时配置以及熔断配置,保证请求的可用有效文章来源地址https://www.toymoban.com/news/detail-568951.html

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: SEMAPHORE #开启spring fegin本地线程共享策略,用于fegin调用其他服务时传递请求头信息
          thread:
            timeoutInMilliseconds: 800000
ribbon:
  ReadTimeout: 300000   # 请求处理的超时时间
  ConnectTimeout: 3000    # 请求连接的超时时间
  SocketTimeout: 300000
  MaxAutoRetries: 1   # 对当前实例的重试次数
  MaxAutoRetriesNextServer: 1  # 切换实例的重试次数
  OkToRetryOnAllOperations: true  # 对所有操作请求都进行重试

到了这里,关于easyExcel/poi导出文件Can not close IO,This archive contains unclosed entries的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • easyexcel导出报错 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

    easyexcel导出报错 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

    报错: 原因: 这是因为poi依赖不一致导致的,将poi各个依赖换成一直就行 我的是easyexcel 2.2.7版本 对应poi三个依赖4.1.2,替换后问题解决

    2024年02月04日
    浏览(38)
  • Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

    Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

    一般列表导出以及个性化样式设置请看下面的文章: JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况. JAVA导出Excel通用工具——第二篇:使用EasyExcel导出excel的多种情况的例子介绍.

    2024年04月29日
    浏览(14)
  • Authorization Failed You can close this page and return to the IDE

    Authorization Failed You can close this page and return to the IDE

    注册JetBrains成功,并且通过了学生认证,但在activate pycharm时,却显示Authorization Failed You can close this page and return to the IDE如上图 可能是因为之前使用了破解版pycharm 1.打开文件夹中隐藏的项目 2.找到JeBrains文件夹,在AppData下面,将JeBrains文件夹删除 目录:c盘-用户-AppData 3.找到下

    2024年01月25日
    浏览(14)
  • POI及EasyExcel操作xls,xlsx文件

    POI及EasyExcel操作xls,xlsx文件

    Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。 HSSF - 提供读写 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 档案的功能。 XSSF - 提

    2024年02月11日
    浏览(9)
  • Apache POI及easyExcel读取及写入excel文件

    目录 1.excel 2.使用场景 3.Apache POI 4.easyExcel 5.总结 1.excel excel分为两版,03版和07版。 03版的后缀为xls,最大有65536行。 07版的后缀为xlsx,最大行数没有限制。 2.使用场景 将用户信息导出到excel表格中。 将excel中的数据读取到数据库中。 3.Apache POI (1)说明 Apache POI是Apache软件基金会

    2024年02月06日
    浏览(15)
  • 【Spring】数据导出为Excel的接口报java.io.IOException: UT010029: Stream is closed错误

    【Spring】数据导出为Excel的接口报java.io.IOException: UT010029: Stream is closed错误

    实习时导师让写一个平台信息导出为Excel的功能,写完之后发现文件正常导出,但控制台一直报 Stream is closed 错误。在网上找了大半天,都说是使用 OutputStream 时关闭了流导致的,这也确实是可能导致报错的原因之一,但我并未手动关闭 OutputStream ,排查半天,问了旁边大佬才

    2024年01月16日
    浏览(11)
  • EasyExcel报错Can not find ‘Converter‘ support class Map.解决办法

    最近在将POI改造easyexcel,遇到报错如下 修改办法是在实体类加上如下注解即可解决,最主要的是@ExcelIgnoreUnannotated,其他注解可不加,这个注解的意思官网上有,可以自己去读一下官网。 报错信息

    2024年02月10日
    浏览(14)
  • EasyExcel导出Excel文件

    方法一 导入EasyExcel依赖 创建实体类 OrderServiceImpl 如果希望多个sheet导出那么可以 测试类 方法二 导入EasyExcel依赖 编写ExcelUtil 编写Service层代码 controller层代码 方法一与方法二都使用了EasyExcel进行Excel的导出,区别在于方法一建立了实体类进行Excel的导出,这样的好处是可以直

    2024年02月14日
    浏览(15)
  • EasyExcel 修改导出的文件属性

    导出的文件有多种属性,本文只针对sheet名称进行举例 需要自定义拦截器 registerWriteHandler (new TemplateSheetStrategyHandler()) TemplateSheetStrategyHandler为自定义拦截器 自定义拦截器需要重写对应情况的方法 每个Excel所需拦截器都需要自定义,不可以通用 SheetWriteHandler 中有 创建前和创建后

    2024年02月09日
    浏览(15)
  • EasyExcel导出时文件名乱码

    EasyExcel导出时文件名乱码

    2024年02月06日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包