gpt4 book ai didi

java - 文件入站 channel 无法读取文件

转载 作者:行者123 更新时间:2023-11-29 08:51:00 27 4
gpt4 key购买 nike

我使用 Spring Integration 来处理手动添加到文件夹的 CSV 文件。

我整合的开始是:

<bean id="recursiveScanner" class="org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner" />
<int-file:inbound-channel-adapter channel="filesIn" directory="file:${integration.directory}" scanner="recursiveScanner">
<int:poller id="poller" fixed-delay="${integration.delay}" />
</int-file:inbound-channel-adapter>

紧随其后的是自定义服务激活器。

当我在扫描目录中移动一个小文件(几兆)时,它工作得很好,但是当它是一个大文件(93 Mio)时,我得到一个异常:

org.springframework.batch.item.ItemStreamException: Failed to initialize the reader
..........
Caused by: java.io.FileNotFoundException: D:\nreco-import-batch-2014\.\home\entries.csv (Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus)

它说无法读取文件,因为已经被另一个进程打开了。

我的猜测是 Spring channel 在文件传输开始时被触发,此时文件仍在被操作系统复制,因此尚不可读。

所以我的问题是:有没有办法将文件入站 channel 配置为仅在文件复制完成时触发?

目前我在本地测试,两个硬盘之间的传输速率非常好,但应用程序将部署在服务器上,扫描的目录将通过 FTP 访问,我确信它会失败,然后再处理小得多的文件...

谢谢


编辑:忘了解释一部分

我的一个服务激活器(最后一个)是一个 Spring Batch 作业,它解析新添加的文件、处理数据并将它们插入 MongoDB 数据库

实际上是 Batch 步骤读取抛出异常的文件

最佳答案

我记得我曾经开发过类似的应用程序...我们有 2 个目录...

\in\用于文件传输...每隔 x 分钟,它会检查文件是否存在。一旦文件存在,它就会重命名并将其移动到\process\目录中。

我们在 aix 下使用 scp,它完成了处理非常大的文件的工作。

关于java - 文件入站 channel 无法读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com