如何在下载文件时停止spring sftp入站通道适配器轮询

时间:2015-06-20 17:58:31

标签: java spring spring-integration sftp

我正在尝试使用java程序通过SFTP从远程服务器下载几个文本文件。为此我使用的是Spring Integration SFTP模块,我已经配置了一个入站通道适配器,如下所示。

 <int:channel id="recieveChannel">
        <int:queue />
    </int:channel>

    <int-sftp:inbound-channel-adapter 
        session-factory="sftpSessionFactory"
        local-directory="C:\test-outbound\"
        channel="recieveChannel"
        filename-regex=".*\.txt$"            
        remote-directory="/opt/IInsurer/messages/" 
        >
        <int:poller fixed-rate="10000" receive-timeout="10000"></int:poller>
    </int-sftp:inbound-channel-adapter>

问题是每件事都运行正常,即文件被正确下载到本地目录但是池继续运行。我只是希望这是一次性的事情。我不想连续轮询远程目录。如何下载文件后如何停止轮询?。我需要的是某种事件驱动的下载机制,我手动触发,一旦下载文件就会关闭。

我还弹出绑定网关适配器,但它也是如此。我将非常感谢你的帮助。很多谢谢

1 个答案:

答案 0 :(得分:0)

我使用start()方法启动了入站适配器。进一步使用单独的通道来读取接收具有相关超时的消息。如果在超时期限内没有收到任何消息,我使用stop()停止适配器。

适配器配置

<int-sftp:inbound-channel-adapter   id="RemoteTestingInboundChannelAdapter"  
        channel="requestChannel"
        session-factory="sftpSessionFactoryRemoteTesting" 
        local-directory="${sync.dir}"
        remote-directory="${RemoteTesting.local.dir}"
        auto-startup="false" 
        temporary-file-suffix=".writing"
        filter = "compositeFilterRemoteTesting" 
        delete-remote-files="false"> 
        <int:poller fixed-rate="${RemoteTesting.poller}" max-messages-per-poll="${RemoteTesting.maxMessagesPerPoll}"/>
     </int-sftp:inbound-channel-adapter>

主要课程

adapter.start();

QueueChannel localFileChannel = context.getBean("requestChannel", QueueChannel.class);

Message<?> received = localFileChannel.receive();

while (received!=null)
                received = localFileChannel.receive(timeOutPeriod);
adapter.stop();

适配器在主类触发时启动。它会下载所有文件,等待新文件,直到超时然后停止。