2016-07-27 69 views
0

我正在使用spring batch處理processinglarge dataSpring批處理並行處理兩個任務,但第二個任務依賴於第一個任務

我的問題是我有兩個不同的Taskletexecutingone after another。我不能並行運行,因爲第二個tasklet先有一個依賴關係Tasklet。爲了節省時間,我想在的前幾個tasklet之後立刻開始下一個Tasklet。由於Spring Batch使用Chunk Oriented處理風格。一個Tasklet可以ItemWriter,將已處理物品的大塊傳遞給另一個TaskletItemReaderItemProcessorItemWriter用於下一個處理?但雖然另一個tasklet正在對chunk,前tasklet應該NOT等待,它應該繼續iterationnextchunk

+0

是每個項目的依賴項嗎?你能用一個閱讀器和一個複合物品處理器/作家嗎? –

+0

@DeanClark我需要在'ItemWriter'寫出數據庫中項目的卡盤後開始下一個任務。我的下一個任務的'ItemReader'將從數據庫中選擇這些項目,或者在其他情況下,我也可以將項目列表傳遞給下一個任務的'ItemWriter',但是這些項目在下一步處理之前應該在數據庫中提交。謝謝回覆。 –

回答

1

根據您的描述和上述附加信息,我將簡單地使用CompositeItemWriter來實現此目的。

項目列表將首先由WriterOne寫入,然後傳遞給WriterTwo並寫入。

<bean id="compositeWriter" 
     class="org.springframework.batch.item.support.CompositeItemWriter"> 
    <property name="delegates"> 
     <list> 
      <ref bean="writerOne" /> 
      <ref bean="writerTwo" /> 
     </list> 
    </property> 
</bean> 

<bean id="writerOne" ... /> 
<bean id="writerTwo" ... /> 
+0

這是可能的 - 當'writerTwo'處理大塊項目時,'Tasklet'不應該等待,'ItemReader'應該繼續'迭代'到'下一個塊'上?如果你已經注意到了,在我的問題中,我也問過'當另一個tasklet在這個塊上工作時,以前的tasklet不應該等待,它應該繼續迭代下一個塊。非常感謝你。 –

+0

是否擔心第二次操作(由'writerTwo'執行的操作)比第一次操作花費的時間要長得多?通常,重讀和解析記錄的開銷以及與之相關的相關IO會使讀取相同數據的次數少於兩次同步寫入器的吸引力。 –

相關問題