2015-05-10 18 views
1

我正在嘗試使用ftp入站適配器輪詢本地目錄以獲取文件以供進一步處理。我想將文件移動到另一個本地目錄並從源頭刪除它。沒有辦法實現它。這是我到目前爲止:使用Spring集成ftp入站適配器將處理後的文件移動到另一個目錄

<int-ftp:inbound-channel-adapter id="ftpInbound" 
    channel="ftpChannel" session-factory="ftpClientFactory" 
    filename-pattern="*.xml" auto-create-local-directory="false" 
    delete-remote-files="false" remote-directory="/" local-directory="//C://FBS//testmq"> 
    <int:poller fixed-rate="20000" /> 
</int-ftp:inbound-channel-adapter> 

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

回答

1

使用與僞事務管理器的事務同步;請參閱file example in the documentation。下面是從文檔的該部分的配置:

<int-file:inbound-channel-adapter id="inputDirPoller" 
    channel="someChannel" 
    directory="/foo/bar" 
    filter="filter" 
    comparator="testComparator"> 
    <int:poller fixed-rate="5000"> 
     <int:transactional transaction-manager="transactionManager" synchronization-factory="syncFactory" /> 
    </int:poller> 
</int-file:inbound-channel-adapter> 

<int:transaction-synchronization-factory id="syncFactory"> 
    <int:after-commit expression="payload.renameTo('/success/' + payload.name)" channel="committedChannel" /> 
    <int:after-rollback expression="payload.renameTo('/failed/' + payload.name)" channel="rolledBackChannel" /> 
</int:transaction-synchronization-factory> 

繼續閱讀進入下一環節...

參考上面的部分,你可能會想這將是把這些「有用即使在輪詢器下游沒有「真正的」事務資源(例如JDBC)時,也可以在流程完成時執行「成功」或「失敗」操作。例如,考慮後跟一個ftp:outbout-channel-adapter /。這兩個組件都不是事務性的,但我們可能想要根據ftp傳輸的成功或失敗將輸入文件移動到不同的目錄。

爲了提供此功能,框架提供了一個PseudoTransactionManager,即使在沒有涉及真正的事務資源時也可以實現上述配置。如果流程正常完成,則會調用beforeCommit和afterCommit同步,如果失敗,將調用afterRollback。當然,因爲它不是真正的事務,所以不會有實際的提交或回滾。僞事務只是一個用於啓用同步功能的工具。

+0

Thanks Gary :-)這正是我需要的 – amarzeet

+0

@Gary Russell - 有沒有辦法自動創建成功/失敗的目錄?謝謝。 – nsandersen

+0

不適用於SpEL - 您可以刪除表達式,並將文件發送到成功/失敗通道 - 然後您可以在這些通道上添加子流 - 添加服務激活器以創建目錄並重命名文件。 –

相關問題