簡體   English   中英

Spring Batch-在作業中間導入數據時

[英]Spring Batch - when data imported in middle of job run

假設作業實例當前正在運行,並且在前1000條記錄上處於讀/處理/寫操作的中間。 在此期間,又有1000條記錄導入數據庫。 在這種情況下,應在處理1000條記錄后完成第一個作業實例(假定沒有失敗)。 第二實例應觸發並處理下一個1000條記錄。 可能嗎?

還是我要把剩下的1000條記錄留給步驟負責(意味着另一個步驟實例將啟動並執行)?

對的,這是可能的。 這取決於您如何定義選擇。

例如,如果使用JdbcCursorItemReader,則選擇ist會在一開始就執行,因此,此時存在的所有行都會被選擇和處理。 在批處理期間添加的行不屬於此選擇。

使用JdbcPagingItemReader的工作方式有所不同,因為它對每個處理的塊都執行查詢。 因此,有可能選擇在批處理期間插入的數據。 但是,這可能是有關可重新啟動性以及確保將處理所有元素的問題。 因此,在使用PagingItemReader時,必須確保查詢為每個塊選擇相同的數據(分頁閱讀器處理內部狀態,這有助於每個塊接收新行)。 您可以通過確保where子句的一部分(取決於所插入行的時間戳)來保證這一點,或者添加一個state列,然后在第一步中,您只需將當時所有可用條目的狀態設置為某種東西即可像“ toProcess”。 此外,您對Reader的查詢僅需要選擇那些條目。 當然,在處理完條目后,您還必須更新狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM