2017-03-01 80 views
1

我的需求。是輪詢一個指定的時間間隔,例如10分鐘的目錄。如果一個特定擴展名的文件在目錄中找到* .xml,那麼它只是消耗(即選擇和刪除)該文件,並在指定的時間(例如10分鐘)之後打印其他名稱,然後發送郵件該文件沒有被挑選(即消耗)或文件沒有來。使用Spring集成輪詢文件時的問題

有2個選項,我可以通過Spring集成或Core Java的WatchService來完成。以下是我一直寫到現在的Spring Integration代碼:

<int:channel id="fileChannel" /> 
<int:channel id="processedFileChannel" /> 

<context:property-placeholder location="localProps.properties" /> 

    <int:poller default="true" fixed-rate="10000" id="poller"></int:poller> 

    <int-file:inbound-channel-adapter 
     directory="file:${inbound.folder}" channel="fileChannel" 
     filename-pattern="*.xml" /> 

    <int:service-activator input-channel="fileChannel" 
     ref="fileHandlerService" method="processFile" output-channel="processedFileChannel"/> 

    <bean id="fileHandlerService" class="com.practice.cmrs.springintegration.Poll" /> 

以上代碼已成功地針對特定文件模式輪詢文件夾。現在我有兩件事要做:

1)停止輪詢後特定的時間間隔(可配置)說10分鐘。

2)檢查文件夾中是否有特定擴展名的文件...如果文件存在(它會消耗然後刪除),否則它會向一羣人發送電子郵件(電子郵件部分已完成。 )

請幫我在上述2點。

回答

0

您可以使用Smart Poller來做這樣的事情。

如果/當輪詢結果爲消息時,您可以調整輪詢器和/或採取不同的操作。

版本4.2引入了AbstractMessageSourceAdvice。建議鏈中的任何建議對象都是該類的子類,僅適用於接收操作。這樣的類實現以下方法:

beforeReceive(MessageSource<?> source) 

此方法在MessageSource.receive()方法之前調用。它使您能夠在此時檢查和/或重新配置源。返回false將取消此輪詢(類似上面提到的PollSkipAdvice)。

Message<?> afterReceive(Message<?> result, MessageSource<?> source) 

此方法的接收()方法之後調用;再次,您可以重新配置源,或者根據結果採取任何操作(如果沒有源創建的消息,則可以爲null)。你甚至可以返回一個不同的信息!

+0

請問我能舉一個簡單的例子嗎? ....我也沒有從網上獲得任何例子......所以它變得困難......一個例子會有幫助。 – sid

+0

可以以某種方式使用cron表達式來完成這項工作嗎? – sid

+0

不是隻有一個,但可以在'CompoundTriggerAdvice' [javadocs here]中使用兩個cron觸發器(http://docs.spring.io/spring-integration/docs/5.0.0.BUILD-SNAPSHOT/reference/ HTML /消息通道-section.html#_compoundtriggeradvice)。 –