我正在处理的应用程序使用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下抛出。任何关于如何解决这个问题的建议都将受到赞赏,其生产问题和早期反应确实会。