2013-06-19 32 views
2

我使用了Spring Batch管理項目,在這個項目中我有一個異步處理來自特定文件夾的文件的作業。目前我通過傳遞相關的作業參數來通過批量管理員用戶界面運行它。Spring集成配置等待異步批處理作業的結果

現在,我試圖通過使用文件入站通道適配器來自動執行此過程。我已經配置了服務激活器,它會在接收文件時調用批處理作業。現在我有一個新的需求來在第一個文件上傳作業完成後調用另一個批處理作業。爲此,我創建了另一個使用第一個服務激活器的輸出通道的服務激活器。但是由於批處理作業是異步運行的,因此下一批作業會立即執行。是否有辦法讓第二批作業等到第一批作業完成。

我現在configuation是

<file:inbound-channel-adapter id="filesIn" directory="file:${input.directory}" filename-pattern="*.csv" prevent-duplicates="true"> 
    <integration:poller id="poller" fixed-delay="10000"/> 
</file:inbound-channel-adapter> 
<integration:channel id="statusChannel"/> 

<integration:service-activator input-channel="filesIn" output-channel="statusChannel" 
           ref="handler" method="process"/> 

<bean id="handler" class="AnalysisMessageProcessor"> 
    <property name="job" ref="A-importGlobalSettingsDataJob"/> <!--1st job --> 
    <property name="requestHandler" ref="jobMessageHandler"/> 
</bean>  

<bean id="jobMessageHandler" class="org.springframework.batch.integration.launch.JobLaunchingMessageHandler"> 
    <constructor-arg ref="jobLauncher" /> <!--spring batch admins async job launcher --> 
</bean>       

<integration:service-activator input-channel="statusChannel" ref="jobHandler" method="process"/> 
<bean id="jobHandler" class="JobHandler"> <!--This Job handler should get invoked only after the 1st batch job is completed. Currently I am just printing the exit status code of 1st job--> 

任何幫助將是非常讚賞。

回答

4

你基本上有兩個選擇:

  • 事件驅動方式,積極投票作業的執行狀態
  • 觸發下一個批處理作業(第二Spring集成流程的一部分?)使用聽衆

對於第一種方法結帳「查詢儲存庫」(春批次參考文檔的部分):

第二個選項通常是最好的。因此,我相信你可能要考慮使用Spring Batch的JobExecutionListener

請簽出部分中的以下文件中「提供反饋與信息性消息」: