2016-01-05 38 views
1

我在我的應用程序中使用Spring批處理。我有一個需求,在開始處理行之前,我需要在數據庫上執行更新查詢。讀取之後,在映射階段,我根據從dataBase, 中讀取的數據填充列表,並在開始該過程之前,我需要根據此列表更新數據庫中的表。 這個查詢只需要執行一次,這就是beforeProcess()方法不相關的原因,因爲它是爲每一行調用的。Spring批處理執行查詢在啓動過程之前

+0

您的要求不是很清楚,但我認爲您可以將預讀更新查詢分隔成一個tasklet步驟。如果我理解正確,則需要在讀取第一個塊後觸發另一個更新(作業提交間隔似乎設置爲1)。這個查詢也可以在單獨的tasklet步驟中被隔離。一個不那麼優雅的解決方案可以在處理器上實現一個條件,或者創建一個單獨的處理器來做到這一點(但是您將不得不擔心在重新啓動的情況下管理該值)。 – guilhermerama

+0

在一個單獨的tasklet中執行它聽起來像一個很好的方法,事情是我需要使用閱讀器查詢的結果。因爲我認爲只執行更新查詢的第二個處理器會更好。你能建議我如何爲一個閱讀器定義多個處理器及其執行順序?非常感謝! –

+0

如果您選擇CompositeItemProcessor方法,則必須執行if語句才能返回null,如果它不是第一次讀取的話。因此,您將對所有數據庫行進行不必要的條件驗證。 – guilhermerama

回答

0

您可以鏈的處理器與CompositeItemProcessor

<bean class="org.springframework.batch.item.support.CompositeItemProcessor"> 
    <property name="delegates"> 
     <list> 
      <bean class="xx.xx.xx.UpdateDatabaseProcessor"></bean> 
      <bean class="xx.xx.xx.CurrentProcessor"></bean> 
     </list> 
    </property> 
</bean> 

他們將在其聲明的順序執行。

相關問題