代码之家  ›  专栏  ›  技术社区  ›  Panadol Chong

当文件传输到一半时,Spring集成监听器会接收文件吗?

  •  0
  • Panadol Chong  · 技术社区  · 7 年前

    很好的一天,

    我使用SpringIntegration2.2将侦听器构建到一个文件夹。我能知道当文件传输到一半时,我如何检查我的侦听器是否会接收文件吗?或者要等到完整的文件传输完毕?

    假设有一个10MB的txt文件,但是由于internet速度慢,该文件需要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。

    请告知。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Artem Bilan    7 年前

    你的理解完全正确。这就是文件系统的行为方式。如果文件已经存在,即使它仍处于写入模式,它对所有其他人都是可见的,包括所提到的文件读取消息源。

    为了防止读取不完整的文件,当未完成的文件具有不同的名称时,您确实需要实现一个逻辑,并且文件入站通道适配器上的筛选器的配置方式应使它们看不到这样的文件。

    像这样的regexp ^(incomplete).*?\.TXT 现在的解释应该对你有用。