【发布时间】:2013-07-31 09:55:55
【问题描述】:
我正在使用 spring 集成来下载文件并进行处理。
<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>
int-sftp:inbound-channel-adapter 用于从 sftp 服务器下载文件。 它下载大约 6 个文件。所有 xml 文件。
transformer 会遍历所有 6 个文件并检查它们是否有错误标签。 如果有错误标记,则将其错误代码设置为 1。否则将设置为 0。
当它从变压器中出来并进入路由器时, 我想发送错误代码设置为 1 的文件以移动到特定文件夹(错误) 以及将错误代码设置为 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());
}
}
如何使用 spring 集成来实现这一点? 如果不可能,是否有任何解决方法? 我希望现在它清楚了。很抱歉上次没有提供足够的细节。
此外,在 int-sftp:inbound-channel-adapter 中,我已将“远程目录”和“本地目录”字段硬编码到系统中的特定文件夹中。我可以从 bean 属性或常量值中引用这些吗? 我需要根据config.xml文件配置这些值,可以吗?
我是 Spring 集成的新手。请帮我。 提前致谢。
【问题讨论】:
-
对不起,我听不懂你在问什么。请提供更多详细信息,以及路由器前的 SI 配置。
-
感谢@GaryRussell 的回复,我已经更新了帖子的更多细节。请看一看。如果您需要更多详细信息,请询问我。感谢您的帮助。