2011-05-17 97 views
7

我有幾個與連接和彈簧交易有關的問題。春季交易中的一個連接?

  1. 是否彈簧使用時執行DML & DDL操作多種方法在一個事務(傳播電平REQUIRED)執行相同的連接實例?我讀過它確實保持相同的連接,但不知道爲什麼以及它在技術上如何做?在解釋如何提供Spring源代碼中的任何提示時,這將會有所幫助。

  2. 如果我使用Serializable作爲隔離級別,使用Spring聲明性事務將確保在該方法或從原始事務方法調用的任何其他方法中執行數據庫操作時始終使用一個連接?

考慮到這個話題,在使用Spring Transactions時,我是否應該記住任何一點?

任何想法/這個主題的幫助將不勝感激。謝謝。

更新1 - 對不起,我寫了可串行化的傳播級別,而不是隔離級別。更正它。

回答

5
  1. Spring事務管理只是對不同事務資源(如JDBC連接)的統一接口。由於對於大多數事務資源來說,將事務分散到多個連接上是沒有意義的,所以在這些資源的Spring管理事務中的所有操作都在同一個連接中執行。當然,如果您使用分佈式事務JtaTransactionManager,涉及到分佈式事務的每個事務資源都將擁有自己的連接。

  2. 事務隔離級別與Spring事務管理無關。 Their meaning is defined in the database theory。此外,它們與交易傳播無關。

彈簧實現由stroing連接此行爲(如JDBC Connection多個)線程局部狀態使用TransactionSynchronizationManager的一部分。例如參見DataSourceUtils

+0

請您詳細說明以下幾點。 1.「對於大多數事務資源來說,跨多個連接傳播事務是沒有意義的」。你指的是哪些交易資源? 2. Spring如何在事務中完成所有數據庫操作以獲得相同的連接? (如果你可以指出一些春季代碼,我可以看看它會很棒)。 – 2011-05-17 16:27:34

+0

在錯誤的問題中,我添加了可序列化的傳播級別而不是隔離級別。更正它。 – 2011-05-17 16:47:15

+0

@Amit:事務性資源是提供事務性行爲的資源。基礎,它是數據庫和消息隊列。 – axtavt 2011-05-17 17:24:46