1

我正在处理的应用程序有一个使用 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 下抛出。任何有关如何解决此问题的建议都将不胜感激,它的生产问题和早期响应真的很重要。

4

0 回答 0