我在这里使用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端点)
答案 0 :(得分:1)
FileWritingMessageHandler
(<int-file:outbound-channel-adapter>
)可以为您做到这一点。因此,您的REST端点带来了一个文件名,您可以在DB中检查它的状态,例如通过<filter>
,然后使用<int-file:outbound-channel-adapter>
有效负载转到File
,Files.move()
将会为您执行。