Spring事務@Transactional

一、Spring事務簡介

1. 事務是邏輯處理原子性的保證手段。

2. 事務兩個重要特性:傳播級別和隔離級別。

3.?支持編程式事務管理和聲明式事務管理兩種方式。

4. 事務并發(fā)一般需要相應的隔離措施,否則就會出現(xiàn)各種數(shù)據(jù)問題。

二、傳播級別propagation

1.?REQUIRED:如果當前存在事務,則加入該事務;如果當前沒有事務,則創(chuàng)建一個新的事務。這是默認值。

2.?REQUIRES_NEW:創(chuàng)建一個新的事務,如果當前存在事務,則把當前事務掛起。

3.?SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續(xù)運行。

4.?NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。

5.?NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。

6.?MANDATORY:如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。

7.?NESTED:如果當前存在事務,則在嵌套事務內執(zhí)行。如果當前沒有事務,則執(zhí)行與PROPAGATION_REQUIRED類似的操作。(這個和REQUIRED區(qū)別在于一個是加入到一個事務,一個是在嵌套事務運行)

三、隔離級別isolation

1.READ_UNCOMMITTED(讀未提交)

2.READ_COMMITTED(讀已提交)

3.REPEATABLE_READ(可重復讀,MySQL-InnoDB默認隔離級別)

4.SERIALIZABLE(串行化)

四、@Transactional

1. 開啟事務配置

a.)SpringBoot: @EnableTransactionManagement

b.)SpringMVC基于xml配置

xml配置

2.?將@Transactional注釋應用于具有公共可見性的方法。如果注釋protected,private方法,則@Transactional不會引發(fā)錯誤,但帶注釋的方法事務配置不會生效。

3.?使用@Transactional注釋具體類(以及具體類的方法),而不是注釋接口;注釋具體類 ,則該類下public方法事務生效。

4.?在代理模式(默認設置)下,只攔截通過代理進入的外部方法調用。目標對象中的方法調用目標對象的另一個方法,事務不會生效,即使調用的方法被標記@Transactional。

5.?proxy-target-class屬性控制為使用@Transactional注釋的類,創(chuàng)建的事務代理類型。如果?proxy-target-class設置為true,則創(chuàng)建基于類的代理。如果?proxy-target-class是false或者省略了屬性,則創(chuàng)建基于標準JDK接口的代理。

6. 一個栗子:

圖6.1
圖6.2

6.1:注釋 @Transactional的componentOperate()方法里,調用另一個service注釋 @Transactional的createLog(),相當于只有@Transactional的componentOperate()方法里事務生效。

6.2:如果想要另一個service注釋 @Transactional的createLog()事務生效,則用子事務@Transactional(propagation = Propagation.REQUIRES_NEW)。

五、常用操作命令

1. 命令行,開啟事務:

set autocommit=off;?

或start transaction;

2. 提交事務:

commit;

3. 設置當前會話隔離級別:

set session transaction isolation level repeatable read;

set session transaction isolation level READ UNCOMMITTED;

set session transaction isolation level READ COMMITTED;

4. 設置系統(tǒng)當前隔離級別:

set global transaction isolation level repeatable read;

5. 查詢當前會話隔離級別:

select @@tx_isolation;

6. 查看系統(tǒng)當前隔離級別:

select @@global.tx_isolation;

7. use xx;



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

相關閱讀更多精彩內容

  • 一、事務簡單介紹 事務指邏輯上的一組操作,組成這組操作的各個單元,要不全部成功,要不全部不成功。 1.1 事...
    tuacy閱讀 117,214評論 11 110
  • spring事務管理是指在業(yè)務代碼在出現(xiàn)異常之后,對之前的操作進行回滾,保證數(shù)據(jù)庫數(shù)據(jù)的一致性 分為編程式事務管理...
    MicoCube閱讀 9,299評論 0 3
  • Spring 事務屬性分析 事務管理對于企業(yè)應用而言至關重要。它保證了用戶的每一次操作都是可靠的,即便出現(xiàn)了異常的...
    壹點零閱讀 1,383評論 0 2
  • Spring中的@Transactional注解是我們在項目中經常使用的,但如果不了解其實現(xiàn)原理,容易在使用過程中...
    簡小碼閱讀 1,288評論 0 4
  • 事務有四個特性:ACID 原子性(Atomicity):事務是一個原子操作,由一系列動作組成。事務的原子性確保動作...
    jiangmo閱讀 1,301評論 0 7

友情鏈接更多精彩內容