Spring事務的理解

 事務的基本原理:spring

Spring事務的本質其實就是數據庫對事務的支持,沒有數據庫的事務支持,spring是沒法提供事務功能的。對於純JDBC操做數據庫,想要用到事務,能夠按照如下步驟進行:數據庫

  1. 獲取鏈接 Connection con = DriverManager.getConnection()
  2. 開啓事務con.setAutoCommit(true/false);
  3. 執行CRUD
  4. 提交事務/回滾事務 con.commit() / con.rollback();
  5. 關閉鏈接 conn.close();

數據庫隔離級別併發

隔離級別 隔離級別的值 致使的問題
Read-Uncommitted 0     致使髒讀
Read-Committed 1 避免髒讀,容許不可重複讀和幻讀
Repeatable-Read 2 避免髒讀,不可重複讀,容許幻讀
Serializable 3 串行化讀,事務只能一個一個執行,避免了髒讀、不可重複讀、幻讀。執行效率慢,使用時慎重

髒讀:一事務對數據進行了增刪改,但未提交,另外一事務能夠讀取到未提交的數據。若是第一個事務這時候回滾了,那麼第二個事務就讀到了髒數據。性能

不可重複讀:一個事務中發生了兩次讀操做,第一次讀操做和第二次操做之間,另一個事務對數據進行了修改,這時候兩次讀取的數據是不一致的。spa

幻讀:第一個事務對必定範圍的數據進行批量修改,第二個事務在這個範圍增長一條數據,這時候第一個事務就會丟失對新增數據的修改。接口

總結:事務

隔離級別越高,越能保證數據的完整性和一致性,可是對併發性能的影響也越大。ci

大多數的數據庫默認隔離級別爲 Read Commited,好比 SqlServer、Oracle開發

少數數據庫默認隔離級別爲:Repeatable Read 好比: MySQL InnoDBget

 

對於項目中須要使用到事務的地方,我建議開發者仍是使用spring的TransactionCallback接口來實現事務,不要盲目使用spring 事務註解,若是必定要使用註解,那麼必定要對spring事務的傳播機制和隔離級別有個詳細的瞭解,不然極可能發生意想不到的效果。

相關文章
相關標籤/搜索