我正在尝试从目录中读取文件。如果文件无法处理,它会留在那里稍后再试。
<file:inbound-channel-adapter prevent-duplicates="false" id="fileInput" directory="file:${java.io.dir}/input-data" auto-create-directory="true" filter="compositeFileFilterBean"/>
<integration:poller id="poller" max-messages-per-poll="10" default="true" >
<integration:interval-trigger interval="60" time-unit="SECONDS" />
</integration:poller>
问题是如果max-messages-per-poll设置为10,则每个轮询将返回10条消息,即使只有1个文件(即所有10条消息都相同)。
答案 0 :(得分:2)
是的,这将是这些设置的预期行为。
我不确定你为什么认为这是错误的。
如果目录中的文件未被过滤器过滤(例如防止重复过滤的文件),则轮询器将在当前轮询中找到该文件(当max-messages-per-poll时)是> 1)或下次投票。
要执行您想要的操作,您需要一个自定义过滤器,用于过滤先前在60秒轮询间隔内找到的文件。
答案 1 :(得分:0)
您可以: 选项1。在inbound-channel-adapter中将属性“ prevent-duplicates”设置为true。默认情况下,如果没有其他过滤器或文件正则表达式,则此属性为true。如果我们使用的是自定义过滤器,Springs会了解到我们的自定义过滤器将包含AcceptOnceFileListFilter,因此它将prevent-duplicates设置为false。
选项2。带有过滤器org.springframework.integration.file.filters.AcceptOnceFileListFilter的完整bean“ compositeFileFilterBean”