1. 程式人生 > >Transactional 事務回滾 分析

Transactional 事務回滾 分析

transactional

Spring的AOP事務管理默認是針對unchecked exception回滾(運行期異常,Runtime Exception)。


  unchecked ,就是不用手工寫try catch的exception


  Exception作為基類,下面還分checked exception和unchecked exception。如果客戶端可以通過其他的方法恢復異常,那麽這種異常就是checked exception;如果客戶端對出現的這種異常無能為力,那麽這種異常就是Unchecked exception;簡單來說,繼承於RuntimeException的都是unchecked exception。


  Error:

1.總是不可控制的(unchecked)

2.經常用來用於表示系統錯誤或低層資源的錯誤

3.如何可能的話,應該在系統級被捕捉


  Exception:

1.可以是可被控制(checked) 或不可控制的(unchecked)

2.表示一個由程序員導致的錯誤

3.應該在應用程序級被處理


  Java 中定義了兩類異常:

Spring使用聲明式事務處理,默認情況下,如果被註解的數據庫操作方法中發生了unchecked異常,所有的數據庫操作將rollback;如果發生的異常是checked異常,默認情況下數據庫操作還是會提交的。

1) Checked exception: 這類異常都是Exception的子類 。異常的向上拋出機制進行處理,假如子類可能產生A異常,那麽在父類中也必須throws A異常。可能導致的問題:代碼效率低,耦合度過高。

2) Unchecked exception: 這類異常都是RuntimeException的子類,雖然RuntimeException同樣也是Exception的子類,但是它們是非凡的,它們 不能通過client code來試圖解決,所以稱為Unchecked exception 。


[email protected]


  表示這個類的方法中,會開啟事務


  但這個事務只對unchecked( runtime exception)異常回滾


  throw new RuntimeException("異常"); //這個回滾


  throw new Exception("異常");//這個不回滾


  對checked, Exception是不回滾的


  如果要對checked異常進行回滾,則必須在此方法上加:


[email protected](rollbackFor=Exception.class)


  在mng(service)中,如果只是get值,那麽可以在此方法上加:


[email protected](propagation=Propagation.NOT_SUPPORTED)


  事務默認為:


[email protected](propagation=Propagation.REQUIRED)


  REQUIRED:業務方法需要在一個事務中運行。如果方法運行時,已經處在一個事務中,那麽加入到該事務,否則為自己創建一個新的事務。


  NOT_SUPPORTED:聲明方法不需要事務。如果方法沒有關聯到一個事務,容器不會為它開啟事務。如果方法在一個事務中被調用,該事務會被掛起,在方法調用結束後,原先的事務便會恢復執行。


  REQUIRESNEW:屬性表明不管是否存在事務,業務方法總會為自己發起一個新的事務。如果方法已經運行在一個事務中,則原有事務會被掛起,新的事務會被創建,直到方法執行結束,新事務才算結束,原先的事務才會恢復執行。


  MANDATORY:該屬性指定業務方法只能在一個已經存在的事務中執行,業務方法不能發起自己的事務。如果業務方法在沒有事務的環境下調用,容器就會拋出例外。


  SUPPORTS:這一事務屬性表明,如果業務方法在某個事務範圍內被調用,則方法成為該事務的一部分。如果業務方法在事務範圍外被調用,則方法在沒有事務的環境下執行。


  Never:指定業務方法絕對不能在事務範圍內執行。如果業務方法在某個事務中執行,容器會拋出例外,只有業務方法沒有關聯到任何事務,才能正常執行。


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


Transactional 事務回滾 分析