1
我在我的應用程序中使用Spring批處理。我有一個需求,在開始處理行之前,我需要在數據庫上執行更新查詢。讀取之後,在映射階段,我根據從dataBase, 中讀取的數據填充列表,並在開始該過程之前,我需要根據此列表更新數據庫中的表。 這個查詢只需要執行一次,這就是beforeProcess()方法不相關的原因,因爲它是爲每一行調用的。Spring批處理執行查詢在啓動過程之前
我在我的應用程序中使用Spring批處理。我有一個需求,在開始處理行之前,我需要在數據庫上執行更新查詢。讀取之後,在映射階段,我根據從dataBase, 中讀取的數據填充列表,並在開始該過程之前,我需要根據此列表更新數據庫中的表。 這個查詢只需要執行一次,這就是beforeProcess()方法不相關的原因,因爲它是爲每一行調用的。Spring批處理執行查詢在啓動過程之前
您可以鏈的處理器與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>
他們將在其聲明的順序執行。
您的要求不是很清楚,但我認爲您可以將預讀更新查詢分隔成一個tasklet步驟。如果我理解正確,則需要在讀取第一個塊後觸發另一個更新(作業提交間隔似乎設置爲1)。這個查詢也可以在單獨的tasklet步驟中被隔離。一個不那麼優雅的解決方案可以在處理器上實現一個條件,或者創建一個單獨的處理器來做到這一點(但是您將不得不擔心在重新啓動的情況下管理該值)。 – guilhermerama
在一個單獨的tasklet中執行它聽起來像一個很好的方法,事情是我需要使用閱讀器查詢的結果。因爲我認爲只執行更新查詢的第二個處理器會更好。你能建議我如何爲一個閱讀器定義多個處理器及其執行順序?非常感謝! –
如果您選擇CompositeItemProcessor方法,則必須執行if語句才能返回null,如果它不是第一次讀取的話。因此,您將對所有數據庫行進行不必要的條件驗證。 – guilhermerama