Apache POI在多线程中的tmp目录上获得java.io.IOException

2vuwiymt  于 2023-08-07  发布在  Apache
关注(0)|答案(3)|浏览(185)

我有一个Java应用程序,它收到一个创建XLSX文件的请求。
该应用程序是多线程的,这意味着5个用户可以同时运行一个报告。
我的问题是,当报告是巨大的,5个用户一起创建报告时,我得到这个消息java.io.IOException: Could not create temporary directory ',这可能是因为5个线程中的一个删除了java.tmp.dir,其他4个线程失败。
怎么解决呢?
我建议的解决方案之一是给予每个线程一个不同的java.io.tmpdir,这是可以做到的吗?

tjjdgumg

tjjdgumg1#

一个解决方案是在创建临时目录时,线程应该附加一些前缀来唯一地标识。这样就不会有对同一个文件夹的并发修改。
在实现的时候,你必须考虑有多少请求可以同时处理。你不能创建很多目录。
一个解决方案是使用线程池和队列来保存请求,如果请求超过您可以处理的范围。
或者如果内容有相似之处,那么你可以创建一个模板,动态地改变一些数据。所以只有克隆才能工作

clj7thdc

clj7thdc2#

我可能会首先检查您的方法是否与编写这些.xlsx文件有关,是否是线程安全的。你的头可能会同时写相同的文件。

h6my8fg2

h6my8fg23#

对我来说,解决方案是禁止POI删除空目录(来自https://bz.apache.org/bugzilla/show_bug.cgi?id=57200#c4)

touch /tmp/poifiles/.dontdeleteonexitonnonuniquedirectories

字符串

相关问题