美好的一天,
我使用Spring集成2.2建立监听到一个文件夹。我想知道我怎么能检查将我的听众拿起文件时,文件传输一半?或者,它会等到整个文件已经被转移?
让我们说有一个与10MB的TXT文件,但由于互联网缓慢,文件用10秒钟将转移到该文件夹。让我们在第5秒说,该文件只是做传输5MB,仍然5MB去,可能听众去拿起文件和过程?
下面是在XML我的听众代码的一部分:
<int-file:inbound-channel-adapter id="hostFilesIn" directory="${hostfile.dir.in}"
prevent-duplicates="true" filename-regex="${hostfile.in.filename-regex}">
<int:poller id="poller" fixed-rate="${poller.fixrate:15000}" max-messages-per-poll="1" />
</int-file:inbound-channel-adapter>
让我知道如果需要更多的信息。
这里是发生了问题:
从日志中,我们可以看到被添加文件到队列中,
2019-02-01 11:13:33.011 [task-scheduler-9] DEBUG org.springframework.integration.file.FileReadingMessageSource - Added to queue: [/apps/NAS/ftp/in/incompleteL041.TXT]
之后击中了以下错误:
2019-02-01 11:13:33.096 [task-scheduler-9] DEBUG c.c.c.c.g.a.auditservice.SimpleErrorIdResolver - ERROR MESSAGE7 :
java.io.FileNotFoundException: /apps/NAS/ftp/in/incompleteL041.TXT (A file or directory in the path name does not exist.)
它因为,当文件完成转移后,将其重命名为L041.TXT。
好心提醒。
你的理解是正确的完全。这是文件系统的行为。如果文件已经存在,即使它仍然在书写模式,它是所有其他人,包括上述文件读取消息源可见。
为了防止读你真的需要实现一个逻辑,当未整理的文件具有不同的名称和文件入站通道适配器上的过滤器应配置的是他们没有看到这样一个文件的方式不完整的文件。
像这样的正则表达式^(incomplete).*?\.TXT
的东西应该为你工作电流的解释。