在示例https://github.com/ghillert/spring-batch-integration-sample中,文件入站适配器配置为轮询目录,一旦将文件放在该目录中,就会构造FileMessageToJobRequest并启动Spring批处理作业。 因此,对于每个文件,都会构造一个新的FileMessageToJobRequest,并且会创建一个新的Spring批处理作业实例。
我们还希望配置文件入站适配器以轮询文件,但希望使用单个批处理作业实例处理所有文件。
例如,如果我们在目录中放置1000个文件并且每个轮询的max-messages为1000,我们希望将1000个文件的名称作为参数之一发送到Spring批处理作业而不是调用作业1000次。
有没有办法将文件入站适配器在其一次轮询期间选择的文件列表作为单个消息发送到后续的Spring组件?
谢谢你,
问候
苏雷什
答案 0 :(得分:1)
即使它是single poll
,inbound-channel-adapter
也会为每个条目发出消息。
因此,要将它们收集到单个邮件中,您需要使用<aggregator>
。
尽管如此,你必须提出ReleaseStrategy
。即使您只能将1
用作correlationKey
,发布群组也存在一些问题。
您应该同意,您并不总是有1000
个文件将它们分组到单个邮件中。因此,即使您没有足够数量的文件来按大小完成组,也许TimeoutCountSequenceSizeReleaseStrategy
是在timeout
之后发布结果的良好折衷方案。
HTH
<强>更新强>
即使在此期间没有新消息,您也可以考虑在group-timeout
上使用<aggregator>
以允许发布群组。
此外,还有一个expire-groups-upon-completion
选项,以确保您&#34;单身&#34;将在每个release
后清除并删除。允许为下一个poll
形成一个新组。