歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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名稱

Spring中如何配置Hibernate事務 http://www.linuxidc.com/Linux/2013-12/93681.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

基於 Spring 設計並實現 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm

Spring-3.2.4 + Quartz-2.2.0集成實例 http://www.linuxidc.com/Linux/2013-10/91524.htm

使用 Spring 進行單元測試 http://www.linuxidc.com/Linux/2013-09/89913.htm

運用Spring注解實現Netty服務器端UDP應用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm

Spring 3.x 企業應用開發實戰 PDF完整高清掃描版+源代碼 http://www.linuxidc.com/Linux/2013-10/91357.htm

Spring 的詳細介紹:請點這裡
Spring 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved