Spring integration Spring集成以迭代文件或记录列表
我使用SpringIntegration下载文件并处理它们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"
<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文件配置这些值,这可能吗?你不能-这就是为什么你需要拆分器。我还更新了答案,以显示如何设置这些属性。请注意,它们只初始化一次。我希望这不会发生我的问题就解决了。我试试这个。