簡體   English   中英

Spring Batch如何管理事務(可能有多個數據源)?

[英]How does Spring Batch manage transactions (with possibly multiple datasources)?

我想了解有關Spring批處理中數據流的一些信息,但未能在Internet上找到我要查找的內容(盡管本網站上有一些有用的問題 )。

我正在嘗試建立在我們公司使用Spring Batch的標准,我們想知道當一個步驟中的多個處理器更新不同數據源上的數據時,Spring Batch的行為如何。

這個問題集中在一個分塊的過程,但隨時提供有關其他模式的信息。

從我所看到的(如果我錯了請糾正我),當讀取一行時,它會在讀取下一行之前跟隨整個流程(讀取器,處理器,寫入器)(而不是讀取器處理的孤島處理)所有行,將它們發送到處理器,等等)。

在我的例子中,幾個處理器讀取數據(在不同的數據庫中)並在此過程中更新它們,最后寫入器將數據插入到另一個DB中。 目前,JobRepository沒有鏈接到數據庫,但這將是一個獨立的,使得事情仍然有點復雜。

由於數據屬於多個業務領域, 因此無法更改此模型

在這種情況下如何管理交易? 只有處理完整塊后才提交數據嗎? 那么,是否存在兩階段提交管理? 如何確保? 應該進行哪些開發或配置以確保數據的一致性?

更一般地說, 您的建議在類似情況下會是什么?

Spring批處理使用Spring核心事務管理 ,大多數事務語義排列在一大塊項目周圍,如Spring Batch文檔的第5.1節所述

讀者和作者的交易行為取決於他們究竟是什么(例如文件系統,數據庫,JMS隊列等),但如果資源配置為支持事務,那么他們將被spring自動登記。 XA也是如此 - 如果您使資源端點符合XA標准,那么它將使用2階段提交。

回到塊事務,它將以塊為基礎設置事務,因此如果在給定的tasklet上將提交間隔設置為5,則它將打開並關閉新事務(包括事務管理器管理的所有資源)對於設定的讀取次數(定義為commit-interval)。

但所有這些都是圍繞從單一數據源讀取而設置的,這是否符合您的要求? 我不確定spring批處理可以管理一個事務,它從多個源讀取數據並將處理器結果寫入單個事務中的另一個數據庫。 (事實上​​,我無法想到任何能做到這一點......)

暫無
暫無

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

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