Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApachePOI在多线程的tmp目录上获取java.io.IOException_Java_Multithreading_Apache_Apache Poi - Fatal编程技术网

ApachePOI在多线程的tmp目录上获取java.io.IOException

ApachePOI在多线程的tmp目录上获取java.io.IOException,java,multithreading,apache,apache-poi,Java,Multithreading,Apache,Apache Poi,我有一个java应用程序,它收到创建XLSX文件的请求。 此应用程序是多线程的,这意味着5个用户可以同时运行一个报告。 我的问题是,当报表很大,5个用户一起创建报表时,我会收到一条消息java.io.IOException:cannotcreatetemporary directory' 这可能是因为5个线程中的一个删除了java.tmp.dir,而其他4个线程失败了 如何解决此问题? 我建议的解决方案之一是给每个线程一个不同的java.io.tmpdir,这是可以做到的吗?我可能会首先检查您编

我有一个java应用程序,它收到创建XLSX文件的请求。
此应用程序是多线程的,这意味着5个用户可以同时运行一个报告。
我的问题是,当报表很大,5个用户一起创建报表时,我会收到一条消息
java.io.IOException:cannotcreatetemporary directory'
这可能是因为5个线程中的一个删除了java.tmp.dir,而其他4个线程失败了

如何解决此问题?

我建议的解决方案之一是给每个线程一个不同的java.io.tmpdir,这是可以做到的吗?

我可能会首先检查您编写这些.xlsx文件的方法是否是线程安全的。
您的TheAD可能会竞相同时写入相同的文件

我可以先检查您编写这些.xlsx文件的方法是否是线程安全的。
您的TheAD可能会竞相同时写入相同的文件

一种解决方案是,在创建临时目录时,线程应该附加一些前缀来唯一标识。因此,不会同时修改同一文件夹

实现时,你必须考虑有多少个请求可以同时处理。你不能创建很多目录。

一种解决方案是使用线程池和队列来保存请求,如果请求超出了您的处理能力


或者,如果内容相似,则可以创建一个模板并动态更改某些数据。因此,只有克隆才能工作。

在创建临时目录时,一个解决方案是,线程应附加一些前缀以唯一标识。因此,不会同时修改同一文件夹

实现时,你必须考虑有多少个请求可以同时处理。你不能创建很多目录。

一种解决方案是使用线程池和队列来保存请求,如果请求超出了您的处理能力


或者,如果内容相似,则可以创建模板并动态更改某些数据。因此,只有克隆才能工作

@AxelRichter谢谢,但这解决了“在多个线程中访问同一文档将不起作用”的问题。问题不在同一文档中。每个线程创建一个不同的文档,但它们都有相同的java.io.tmpdir,一个线程有时会删除它,而另一个线程则会删除它,因为从您未提供的代码中看,这并不清楚。我严重怀疑poi是否在删除tmp dir。这是由整个jvm共享的,因此这将是一个很大的禁忌。poi库非常成熟,我严重怀疑库中还会存在这样的不良行为。您是否正在删除代码中的任何文件/目录?异常的完整堆栈跟踪是什么?@过氧化物:您对给出的答案满意吗?不作为这么长时间的会员,你应该知道为什么。你没有提供任何代码来显示你的问题。您提供了一个错误,但整个错误消息和stacktrace都没有提供。那么,有人怎么能给出令人满意的答案呢?@AxelRichter谢谢,但这解决了“在多个线程中访问同一个文档将不起作用”的问题。问题不在于同一个文档。每个线程创建一个不同的文档,但它们都有相同的java.io.tmpdir,一个线程有时会删除它,而另一个线程则会删除它,因为从您未提供的代码中看,这并不清楚。我严重怀疑poi是否在删除tmp dir。这是由整个jvm共享的,因此这将是一个很大的禁忌。poi库非常成熟,我严重怀疑库中还会存在这样的不良行为。您是否正在删除代码中的任何文件/目录?异常的完整堆栈跟踪是什么?@过氧化物:您对给出的答案满意吗?不作为这么长时间的会员,你应该知道为什么。你没有提供任何代码来显示你的问题。您提供了一个错误,但整个错误消息和stacktrace都没有提供。那么,有人怎么能给出令人满意的答案呢?我已经检查过了,它是线程安全的。唯一的问题是apache POI有时会删除tmp文件夹。我已经检查过了,它是线程安全的。唯一的问题是apache POI有时会删除tmp文件夹。