程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> spring的事務操作,spring事務操作

spring的事務操作,spring事務操作

編輯:JAVA綜合教程

spring的事務操作,spring事務操作


我們項目一期已經差不多結束了,所以一些細節也被拿了出來,出現最多的就是事務的操作了。因為自己負責的是一個模塊(因為是另外一個項目的負責人),所以組員經常會遇到事務的問題,會出現很多奇葩的用法,各種亂用,估計他們就知道在方法上面注解@Transactional,但是其中的很多細節都不知道。所以經常會出現一個情況,就是一大坨代碼出現了事務的問題,然後我就去各種改。所以今天也對事務做一個總結吧。以後忘記了可以回來看看。

一般我們使用事務最主要注重的是三個方面:

   1.propagation:傳播性  
   2:isolation:事務的隔離級別
   3:readOnly是否只讀

   其中在單獨使用不帶任何參數的 @Transactional 注釋時,傳播模式要設置為 REQUIRED,只讀標志設置為 false,事務隔離級別設置為 READ_COMMITTED,而且事務不會針對受控異常(checked exception)回滾。

傳播性:

 *    3.propagation:傳播性
 *            <br>Propagation取值:
            REQUIRED(默認值):在有transaction狀態下執行;如當前沒有transaction,則創建新的transaction;
            SUPPORTS:如當前有transaction,則在transaction狀態下執行;如果當前沒有transaction,在無transaction狀態下執行;
            MANDATORY:必須在有transaction狀態下執行,如果當前沒有transaction,則拋出異常IllegalTransactionStateException;
            REQUIRES_NEW:創建新的transaction並執行;如果當前已有transaction,則將當前transaction掛起;
            NOT_SUPPORTED:在無transaction狀態下執行;如果當前已有transaction,則將當前transaction掛起;
            NEVER:在無transaction狀態下執行;如果當前已有transaction,則拋出異常IllegalTransactionStateException
            PROPAGATION_NESTED(嵌入式事務):通過創建Savepoint實現嵌套事務,達到內層事務若拋出異常(unchecked exception)則回滾到savepoint處,但不影響外層事務;外層事務的回滾會一起回滾內層事務;
            (對於spring-jdbc和mybatis有用  但是對於hibernate的sessionFactory是沒有有用的)

隔離級別

 *    1.isolation:事務的隔離級別
 *            spring的事務隔離級別 
            ISOLATION_DEFAULT:使用數據庫默認的隔離級別。 spring中默認是READ_COMMITTED
            ISOLATION_READ_UNCOMMITTED:允許讀取改變了的還未提交的數據,可能導致髒讀、不可重復讀和幻讀。 
            ISOLATION_READ_COMMITTED:允許並發事務提交之後讀取,可以避免髒讀,可能導致重復讀和幻讀。 
            ISOLATION_REPEATABLE_READ:對相同字段的多次讀取結果一致,可導致幻讀。 
            ISOLATION_SERIALIZABLE:完全服從ACID的原則,確保不發生髒讀、不可重復讀和幻讀。

是否只讀:

6.readOnly是否只讀  默認不是只讀(false)  如果沒有事務的時候 那麼這個設置會被忽略

1.其中我們需要注意的地方是,我們在使用orm框架的時候,是需要使用事務來觸發sql的執行的。所以在我們使用orm框架中都會使用事務。而且很重要的是在hibernate典型的no session錯誤也有一大大部分問題是出在沒有添加事務。
2.第二個注意點就是說如果我們選擇的策略中沒有事務,那麼設置了是否只讀屬性沒有任何的作用的。
3.其他幾個屬性的作用:

    timeout事務的響應時間 ,如果超過時間 那麼就會出現錯誤。單位是秒
    noRollbackFor:指定異常類不會回滾,在默認的情況下  事務回滾只對於RuntimeException的異常有用(只對非checked的異常回滾)
    noRollbackForClassName:和上面是相同的意思  但是這裡是指定異常的名稱
   value名稱

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved