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

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

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

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

    2024年04月29日
    浏览(41)
  • 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日
    浏览(44)
  • 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日
    浏览(40)
  • 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日
    浏览(52)
  • 【Spring】数据导出为Excel的接口报java.io.IOException: UT010029: Stream is closed错误

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

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

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

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

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

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

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

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

    2024年02月06日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包