2

我正在用Spring Batch編寫大量批量作業,這些批量作業主要是從數據庫導出/導入數據庫。 Spring Batch作業存儲庫數據庫和目標數據庫(來自/我讀/寫數據)位於不同的機器上。春季批次中的XA交易

我的問題是我應該在此配置中使用XA事務嗎?

我想知道在某些時候連接到作業存儲庫數據庫剎車的場景,它是否會潛在地破壞數據?就像這樣:

  1. 工作啓動(寫入工作資料庫)
  2. 讀/流程/事務中的目標DB寫入
  3. 鏈接到工作倉庫分貝剎車和作業失敗

最後我更新了目標數據庫,但作業失敗,因此在作業重新啓動時將再次處理相同的數據。

回答

1

Spring Batch在其讀寫器中具有禁用臨時狀態保存的功能(您將屬性saveState設置爲false)。這允許您獨立於Spring Batch JobRepository來管理處理的狀態。

在您的示例中,您將在讀取的表上維護「已處理標誌」,並將選擇語句修改爲select * from x where processed = false。這會使你不太依賴JobRepository的狀態。

看看http://static.springsource.org/spring-batch/reference/html/readersAndWriters.html#process-indicator更詳細地解釋它。

+0

這將有所幫助,但問題是我無法修改讀取表結構。 – Vladimir

+0

所以我們回到了jobRepository設計的目的;在沒有另一種機制的情況下保持狀態。我的建議是通過一個監聽器保存一個線性的,非事務性的狀態日誌,或者如果它們成爲JobRepository上的失敗,可以用來協調。這將允許您在出現非常規故障的情況下進行協調和處理。 –