spring 基於AOP事務控制實現的基礎

2021-07-23 05:19:39 字數 1508 閱讀 5660

事務控制比較重要的應該是事務的傳播--propagation,實現的基礎:threadlocal。

...事務控制的完整過程:insight spring @transactional 屬性解析應用。

...

建立事務的過程中,會構造transactioninfo,並且儲存上一級

transactioninfo,繫結至當前執行緒,也就是說事務呼叫鏈的資訊以thread為載體,以transactioninfo 為node,形成事務資訊的鍊錶

事務巢狀的node - transactioninfo:

/**

* opaque object used to hold transaction information. subclasses

* must pass it back to methods on this class, but not see its internals.

*/protected final class transactioninfo

自定義threadlocal:

/**

* threadlocal subclass that exposes a specified name

* as tostring() result (allowing for introspection).

* * @author juergen hoeller

* @since 2.5.2

* @see namedinheritablethreadlocal

*/public class namedthreadlocal

extends threadlocal

@override

public string tostring()

}

...

實踐,我們的巢狀事務應該怎麼寫:

1.service 分層呼叫,整體事務service,子業務service;

2.所有涉及的service 都需要@transactional。

...總結,事務commit 發生的情況:

未設定commit時,原生的jdbc操作,直接commit;

無事務控制的mybaitis 操作,sqlsessiontemplate 檢測到沒有事務,執行commit;

有事務控制的jdbc、

mybaitis 操作,判斷transactionstatus確定執行commit;

...

多事務管理的控制需要注意的:

明確指定

value

= "資料來源對應的

txmanager", 否則會導致的第二種

commit

情況出現。

巢狀事務統一commit 的判斷時機:

committransaction 

判斷status.isnewtransaction() 決定是否docommit();

Spring 基於AOP的事務控制

事務是我們在進行資料操作的時候,要操作的事情,是乙個完整的單元,不可再分的。它包括幾個特性 原子性 一致性 可見性 隔離性 在spring容器中,事務是被封裝到事務管理器中,spring事務管理器的介面是org.springframework.transaction.platformtransact...

Spring 基於xml的事務控制

事務控制的慨念這裡不作說明。事務控制的不好可能會造成資料庫資料的髒讀,汙讀 舉個例子 轉賬的功能 張三給李四轉錢,各自的賬號金額操作完成後,需要各自更新到資料庫,此時如果張三更新完後,程式異常了結束了,使得李四的賬戶沒有更新,使得總金額不對 為了控制這種資料的不合理,引進了事務。張三的賬戶減錢 be...

spring基於xml配置實現事務控制

org.springframework groupid spring context artifactid 5.0.2 release version dependency org.springframework groupid spring tx artifactid 5.0.2 release ...