Spring 事務隔離級別與傳播特性


1. 原理

  A. Spring事務的本質就是數據庫對事務的支持,沒有數據庫事務的支持,Spring是無法提供事務功能的;

  B. 純JDBC操作步驟

    獲取連接:Connection conn = DriverManager.getConnection();

    開啟事務:conn.setAutoCommit(true/false);

    執行CRUD

    提交或回滾事務:conn.commit() / conn.rollback();

    關閉連接:conn.close();

  C. Spring自動完成開啟事務或提交、回滾事務這兩步,只需要在配置類加上開啟@EnableTransactionManagement注解驅動,然后在相關類和方法上加上@Transactional注解;

  D. 真正的數據庫層的事務提交和回滾是通過binlog和redolog實現的。

 

2.  Spring中的隔離級別

  A. default:這 PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別;

  B. read uncommitted:這是事務最低的隔離級別,它充許另外一個事務可以看到這個事務未提交的數據,這種隔離級別會產生臟讀,不可重復讀和幻讀;

  C. read committed:保證一個事務修改的數據提交后才能被另外一個事務讀取,另外一個事務不能讀取該事務未提交的數據,這種隔離級別會產生不可重復讀和幻讀;

  D. repeatable read:這種事務隔離級別可以防止臟讀,不可重復讀,但是可能出現幻讀;

  E. serializable:這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。

 

3. 事務的傳播特性

  A. required:支持當前事務,如果當前沒有事務,就新建一個事務,這是Spring默認的事務的傳播;

  B. supports:支持當前事務,如果當前沒有事務,就以非事務方式執行;

  C. mandatory:支持當前事務,如果當前沒有事務,就拋出異常;

  D. requireds new:新建事務,如果當前存在事務,把當前事務掛起。新建的事務將和被掛起的事務沒有任何關系,是兩個獨立的事務,外層事務失敗回滾之后,不能回滾內層事務執行的結果,內層事務失敗拋出異常,外層事務捕獲,也可以不處理回滾操作;

  E. not supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起;

  F. never:以非事務方式執行,如果當前存在事務,則拋出異常;

  G. nested:如果一個活動的事務存在,則運行在一個嵌套的事務中。如果沒有活動事務,則按REQUIRED屬性執行。它使用了一個單獨的事務,這個事務擁有多個可以回滾的保存點。內部事務的回滾不會對外部事務造成影響。它只對DataSourceTransactionManager事務管理器起效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM