如何从预定目录复制给定文件(按文件名)

时间:2017-03-24 23:42:38

标签: java spring spring-integration

我在这里使用Spring Integration。

我有一个目录,其中文件被另一个服务激活器复制到。

文件需要保持在那里,直到它们在数据库上的状态为processed - 然后我需要将文件移动到下一个目录,通过SFTP将它们发送到最终目的地。

我有一个轮询频道,可以获取processed状态(来自数据库)的文件列表。然后我拆分传入列表(每个Message现在包含我需要移动到其payload中下一个目录的文件的名称。)

如何告诉inbound-channel-adapter只读取定义目录中的给定文件(我有文件的完整路径)并将其复制/移动到下一个目录?

到目前为止,这是我的配置:

<!-- File Adapters: Inbound -->
<file:inbound-channel-adapter 
          id="filesInChannelAdapter"
          filename-regex="/^#jsonPath(payload,'$.filename')$/"   <<< this does not work     
          directory="${inbound.dir}" />

<!-- Service Activators -->
<int:service-activator input-channel="filesInChannelAdapter"
                       output-channel="filesOutChannelAdapter"
                       id="fileCopyActivator"
                       method="handleFile"
                       ref="fileCopyHandler"/>

 <!-- File Adapters: Outbound -->
 <file:outbound-channel-adapter 
        id="filesOutChannelAdapter"
        preserve-timestamp="true"
        delete-source-files="true"
        directory="${outbound.dir}"/>

有没有办法在不必轮询目录的情况下读取文件?

在从DB查询状态后,如何将文件从目录A复制到B? (通过REST端点)

1 个答案:

答案 0 :(得分:1)

FileWritingMessageHandler<int-file:outbound-channel-adapter>)可以为您做到这一点。因此,您的REST端点带来了一个文件名,您可以在DB中检查它的状态,例如通过<filter>,然后使用<int-file:outbound-channel-adapter>有效负载转到FileFiles.move()将会为您执行。