若service裡面有個方法做了@transactional事務註解, 那麼這個方法會被org.springframework.transaction.interceptor.transactioninterceptor攔截, 最後會在執行org.springframework.transaction.interceptor.transactionaspectsupport#invokewithintransaction, **:
transactionattributesource tas = gettransactionattributesource();
final transactionattribute txattr = (tas != null ? tas.gettransactionattribute(method, targetclass) : null);
final platformtransactionmanager tm = determinetransactionmanager(txattr);
...if (txattr == null || !(tm instanceof callbackpreferringplatformtransactionmanager)) {
// standard transaction demarcation with gettransaction and commit/rollback calls.
transactioninfo txinfo = createtransactionifnecessary(tm, txattr, joinpointidentification);
通過獲取方法@transactional來獲取屬性 txattr, 再根據txattr(裡面包含transactionmanager在spring容器裡面的註冊名字, 以指定使用哪個事務管理器,若value為空則使用預設的事務管理器)獲得事務管理器tm
然後, 根據tm建立一支事務 org.springframework.transaction.interceptor.transactionaspectsupport#createtransactionifnecessary
浪費了一天時間跟蹤, 備忘一下做個紀念.
另外, 若要用註解的方式進行資料來源(連同事務管理器)的切換, 如果這個方法需要事務管理, 則必須定義每乙個資料來源的同時, 亦要對應每個資料來源定義乙個事務管理器(datasourcetransactionmanager)並放於spring容器中
然後同時用上這兩個註解 :
spring 乙個簡單例項之對事務的支援
spring 對事務的支援 事務簡介 滿足一下四個條件 第一 原子性 第二 一致性 第三 隔離性 第四 永續性 程式設計式事務管理 spring 提供的事務模版類 org.springframework.transaction.support.transactiontemplate 事務管理器 or...
講一下 Spring的事務傳播特性
1.propagation required 如果存在乙個事務,則支援當前事務。如果沒有事務則開啟 2.propagation supports 如果存在乙個事務,支援當前事務。如果沒有事務,則非事 務的執行 3.propagation mandatory 如果已經存在乙個事務,支援當前事務。如果沒...
事務 了解一下
事務的隔離級別 事務隔離級別的實現 mvcc mvcc的缺點 事務的四大特性是老生常談的問題了 依次是a 原子性 c 一致性 i 隔離性 d 永續性 a事務讀到了回滾的b事務修改的資料。即b事務修改了資料,這個時候a事務讀到了修改的資料,但是b事務這個時候回滾了。a事務讀到的資料就是髒資料,稱為髒讀...