#千鋒逆戰(zhàn)事務

一、spring的事務提供了三個核心接口PlaffromTransactionManager、TransactionDefinition、TransactionStatus

PlaffromTransactionManager該接口主要用于管理事務

一般我們使用時sping的事務會指定一個我們期望用的事務管理器,不然spring會用默認的事務管理器可能無法達到我們的希望效果。

TransactionDefinition接口是事務定義的描述對象,該對象中定義了事務規(guī)則,并獲取食物相關信息的方法。

TransactionStatus接口是事務的狀態(tài)接口

spring的事務提供了統(tǒng)一的事務編程模型

提供了編程式事務和聲明式事務,編程式事務可以精確的定義。

聲明式事務只需要簡單的配置由spring的事務實現(xiàn)。基于aop的實現(xiàn)

事務的傳播行為7個,

REQUIRED需要一個事務

REQUIRES_NEW開啟一個新事務去處理

MANDATORY必須一個事務 不再,不是事務操作異常

NEVER必須不是一個事務不然則報錯

SUPPORTS支持不是一個事務,是事務也行

NOT_SUPPORTED不支持不是一個事務,如果當前線程在一個事務中,則掛起事務

NESTED嵌套的事務,有點像REQUIRED,但是有些區(qū)別

isolation是事務的隔離級別,DEFAULT默認為可重復度,四個級別,串行、可重復讀、讀已提交、讀未提交

事務可能失效的原因

1.如果不是Innodb存儲引擎,innodb和db支持

2.沒有指定rollbackFor參數(shù)。

3. 沒有指定transactionManager參數(shù),默認的transactionManager并不是我期望的,以及一個事務中涉及到了多個數(shù)據(jù)庫。

4. 如果AOP使用了JDK動態(tài)代理,對象內(nèi)部方法互相調(diào)用不會被Spring的AOP攔截,@Transactional注解無效。

5. 如果AOP使用了CGLIB代理,事務方法或者類不是public,無法被外部包訪問到,或者是final無法繼承,@transactional注解無效。

在一個方法中調(diào)用另一個事務操作對于不同的傳播級別:

1.當傳播級別為為REQUIRED時,第一種情況A和B都會回滾。

2.。當傳播級別為RQUIRED_NEW時,第一種情況A可以成功提交,B回滾,第二種情況A回滾,B可以正確提交,二者互不影響。(在A事務捕獲B事務異常的情況下,保證A事務提交)

3.當傳播級別為NESTED時,第一種情況A可以正常提交,B回滾,第二種情況二者都會回滾。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容