我正在处理的应用程序有一个使用 Spring Integration 2.5 构建的集成层,它尝试使用 FTP 适配器从 FTP 服务器中提取一个 CSV 文件,并将其放到由文件适配器轮询的本地服务器上。因此,一旦文件被 ftp 下载,文件适配器就会将其传递给 Splitter,其中 CSV 文件被拆分为单独的记录并发送到下游进行进一步处理。
当拆分器有时看不到 FTP 适配器下载的文件时,会出现此问题。下面是配置详细信息和来自拆分器的那段代码,它试图检查文件是否存在,如果文件不存在则抛出用户定义的异常。
问题是它总是遇到异常。
<ftp:inbound-channel-adapter id="ftpInbound" channel="ftpChannel"
session-factory="ftpClientFactory"
filename-regex="${ftp.server.remotefilename}"
auto-create-local-directory="true" delete-remote-files="false"
remote-directory="${ftp.server.remotefolder}"
local-directory="file:${ftp.server.localfolder}">
<si:poller ref="FTPPoller"></si:poller>
</ftp:inbound-channel-adapter>
<si:channel id="ftpChannel">
<si:queue />
</si:channel>
<file:inbound-channel-adapter id="fileInboundAdapter"
channel="fileIn" directory="file:${ftp.server.localfolder}"
filename-pattern="${ftp.server.localfilename}"
auto-create-directory="true" prevent-duplicates="false">
<si:poller ref="filePoller"></si:poller>
</file:inbound-channel-adapter>
<si:channel id="fileIn" />
<si:splitter input-channel="fileIn" output-channel="csvRowsIn" ref="inboundFileRowSplitter" method="extractRows" />
public class InboundFileRowSplitter {
@Splitter
public Collection<String[]> extractRows( @Headers
Map<String, Object> headers, File keywordFile ) {
>>Other Processing<<
return processKeywordsFile( keywordFile );
}
private Collection<String[]> processKeywordsFile( File keywordFile ) {
try {
if (keywordFile.exists()) {
>>Other Processing<<
} else {
throw new ResourceLoaderException( "............................" );
}
} catch (Exception e) {
>>Other Processing<<
} finally {
>>Other Processing<<
}
}
在下面的代码中,它在定义的期望 ResourceLoaderException 下抛出。任何有关如何解决此问题的建议都将不胜感激,它的生产问题和早期响应真的很重要。