Spring integration Spring集成以迭代文件或记录列表

Spring integration Spring集成以迭代文件或记录列表,spring-integration,Spring Integration,我使用SpringIntegration下载文件并处理它们 <int-sftp:inbound-channel-adapter channel="FileDownloadChannel" session-factory="SftpSessionFactory" remote-directory="/home/sshaji/from_disney/files"

我使用SpringIntegration下载文件并处理它们

<int-sftp:inbound-channel-adapter channel="FileDownloadChannel"
                      session-factory="SftpSessionFactory"
                      remote-directory="/home/sshaji/from_disney/files"
                      filter = "modifiedFileListFilter"
                      local-directory="/home/sshaji/to_disney/downloads" 
                      auto-create-local-directory="true" >                       
       <integration:poller cron="*/10 * * * * *" default="true"/>   
</int-sftp:inbound-channel-adapter>

 <integration:transformer  input-channel="FileDownloadChannel"
                            ref="ErrorTransformer"
                            output-channel="EndChannel"/>

   <integration:router input-channel="FileErrorProcessingChannel"
                        expression="payload.getErrorCode() > 0">   
        <integration:mapping value="true" channel="ReportErrorChannel"/>
        <integration:mapping value="false" channel="FilesBackupChannel"/>
   </integration:router>

intsftp:inbound通道适配器用于从sftp服务器下载文件。 它下载大约6个文件。所有xml文件

转换器迭代所有6个文件,并检查它们是否有错误标记。 如果有一个错误标签,那么它会将其错误代码设置为1。否则将设置为0

当它从变压器出来,进入路由器时, 我想将errorcode设置为1的文件发送到特定文件夹(错误) 而那些将errorcode设置为0的文件夹将移动到另一个文件夹(NoError)

当前,转换器返回一个“列表文件名”,其中包含所有6个文件的错误代码和文件名

如何使用路由器检查每个文件的错误代码?然后将特定文件映射到路由器

我的问题的通用C逻辑

for (int i =0; i<fileNames.lenght();i++) {
     if(fileNames[i].getErrorCode == 1) {
     moveToErrorFolder(fileNames[i].getName());
     } else {
     moveToNoErrors(fileNames[i].getName());
     }
}

for(inti=0;i我仍然不清楚“transformer迭代所有6个文件”是什么意思

每个文件都将在一条消息中传递给transformer,因此我不知道它如何发出一个包含6个文件的列表

听起来您需要一个带有
相关策略表达式=“'foo'”
发布策略表达式=“size()==6”的
。这会将每个
文件
聚合为
文件的列表
,并将其传递给转换器。然后将其转换为包含文件名和错误代码的状态对象列表

最后,您将添加一个
,它将列表拆分为单独的文件名消息发送到路由器


您可以为目录属性
${some.property}
使用普通的Spring属性占位符,或者使用另一个bean的属性
#{someBean.remoteDir}

对不起,我不明白你在问什么。请提供更多详细信息,以及路由器前的SI配置。谢谢@GaryRussell的回复,我已经更新了帖子的更多详细信息。请看一看。如果你需要更多详细信息,请问我。我感谢你的帮助。好的,我如何将拆分器和路由器结合起来为此目的。拆分器输出将是一个大小为6的状态对象列表。路由器将如何处理每个单独的文件并将它们映射到单独的通道。我只看到路由器将整个有效负载映射到两个不同的通道。我没有看到基于有效负载中单个内容的路由器映射。我对此不熟悉。请建议一个示例这将是非常有帮助的。另外,你能为int sftp建议一个解决方案吗:入站通道适配器,我已经硬编码了“远程目录”和“本地目录”字段到系统中的特定文件夹。我可以从bean属性或常量值引用这些字段吗?我需要根据config.xml文件配置这些值,这可能吗?你不能-这就是为什么你需要拆分器。我还更新了答案,以显示如何设置这些属性。请注意,它们只初始化一次。我希望这不会发生我的问题就解决了。我试试这个。