我有一个将文件下载到特定位置的应用程序。还有另一个应用程序使用integrationflowbuilder从该位置读取文件,我希望我的第二个应用程序仅在文件完全加载时处理。下面是我的第二个应用程序如何使用该文件。
FileInboundChannelAdapterSpec fileInboundChannelAdapterSpec = Files
.inboundAdapter(Paths.get(dir.toFile(), comparingLong(File::lastModified));
fileInboundChannelAdapterSpec.patternFilter(pattern.get());
fileInboundChannelAdapterSpec.preventDuplicates(true);
IntegrationFlowBuilder integrationFlowBuilder = IntegrationFlows.from(fileInboundChannelAdapterSpec);
为什么要通过修改integrationflowbuilder中的某些内容来实现这一点。
1条答案
按热度按时间dwbf0jvd1#
如果您的第一个应用程序通过tmp文件写入文件,然后在完成向文件写入内容后将其重命名为目标名称,那就太好了。因此,在分别重命名目标文件之前,目标文件对轮询应用程序不可见。
另一个技巧是通过
LastModifiedFileListFilter
:尽管这不是完全可靠的方法,因为您无法预先猜测文件的写入时间。
另一种方法是通过一些文件锁定技巧来实现,但是这样你就需要再次修改producer应用程序。
查看文档中有关筛选器的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/file.html#file-阅读