如何解决使用Spring Integration读取文件,并希望使用过滤器进行订购和文件提取
我正在尝试实现一种方案,其中在Kubernetes环境中的多个Pod上运行的spring集成应用程序试图从一个目录中读取文件。
FileLocker locker = new NioFileLocker();
locker.unlock(file);
摘要:
a。文件适配器(将选择未锁定且不包含带有_processing前缀的另一个文件的文件)。
b。读取文件后加锁。
C。使用文件名和_processing前缀创建临时文件。
d解锁文件并使用转换器和批处理作业对其进行处理。
e。从目录中读取文件的另一个Pod将检查未锁定且没有临时文件的文件。
<file:inbound-channel-adapter
channel="input"
directory="C:/Users/*****/TestFileIntegration/inputWithData"
auto-startup="true"
prevent-duplicates="true"
queue-size="10"
use-watch-service="true">
<int:poller id="poller" fixed-delay="1" />
<file:nio-locker/>
</file:inbound-channel-adapter>
我需要两点帮助
1。以某种方式读取文件,代码会首先选择最早的文件,最后选择最新的文件。
2。筛选并读取没有名为fileName_Processing且未锁定的临时文件的文件。
解决方法
请考虑不要使用<file:nio-locker/>
,而是使用共享的FileSystemPersistentAcceptOnceFileListFilter
配置MetadataStore
。因此,您的应用程序的每个实例都将在轮询文件之前先咨询该存储。并且如果有文件条目,则当前实例将跳过它:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/file.html#file-reading
对于您要寻找的订单,comparator
上有一个 <file:inbound-channel-adapter>
选项:
<xsd:attribute name="comparator" type="xsd:string">
<xsd:annotation>
<xsd:documentation><![CDATA[
Specify a Comparator to be used when ordering Files. If none is provided,the
order will be determined by the java.io.File implementation of Comparable. MUTUALLY EXCLUSIVE with queue-size.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。