2015-12-02 69 views
0

我想將文件從遠程服務器拉到我的本地。我正在使用Spring集成SFTP來提取文件。我有以下配置:sftp彈簧集成 - 從遠程提取文件

<sftp:inbound-channel-adapter id="sftpAdapterAutoCreate" 
     session-factory="sftpSessionFactory" channel="inputChannel" 
     filename-pattern="*.txt" remote-directory="/remotedir" 
     local-directory="file:target/foo" auto-create-local-directory="true" 

     delete-remote-files="false" > 
      <int:poller fixed-rate="30000" /> 

</sftp:inbound-channel-adapter> 

我不想在成功拉動後從remotedir刪除文件。這裏發生的事情是每30秒鐘一次,來自remotedir的文件被拉到我的本地。我希望Spring批處理程序在第一次後停止,而不是再次拖動相同的文件。 我該如何做到這一點?

回答

0

入站通道適配器使用目錄同步的概念;如果您的流刪除文件,它將被重新獲取以同步本地目錄。但它不會作爲消息發出,因爲本地過濾器是AcceptOnceFileListFilter。但是,這並不能在系統重新啓動時存在。

您可以使用CompositeFileListFilter加入SftpPersistentAcceptOnceFileListFilter以及SftpSimplePatternFileListFilter。這將防止重新獲取,並將在系統重新啓動後繼續存在;但是,它需要一個MetadataStore來存儲狀態。

要僅運行一次,您可以使用FireOnceTrigger並將max-messages-per-poll設置爲-1,以便在單次輪詢中獲取所有文件。

你也可以考慮使用出站網關get只有那些你想要的文件。