Spring配置聲明式事務

Spring配置聲明式事務

* 配置DataSource

* 配置事務管理器

* 事務的傳播特性

* 那些類那些方法使用事務

Spring配置文件中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。

    DataSource、TransactionManager這兩部分只是會根據數據訪問方式有所變化,比如使用Hibernate進行數據訪問 時,DataSource實際爲SessionFactory,TransactionManager的實現爲 HibernateTransactionManager。

根據代理機制的不同,Spring事務的配置又有幾種不同的方式:

第一種方式:每個Bean都有一個代理

第二種方式:所有Bean共享一個代理基類

第三種方式:使用攔截器

第四種方式:使用tx標籤配置的攔截器

第五種方式:全註解

1、spring事務控制放在service層,在service方法中一個方法調用service中的另一個方法,默認開啓幾個事務?

spring的事務傳播方式默認是PROPAGATION_REQUIRED,判斷當前是否已開啓一個新事務,有則加入當前事務,否則新開一個事務(如果沒有就開啓一個新事務),所以答案是開啓了一個事務。

2、spring 什麼情況下進行事務回滾?

Spring、EJB的聲明式事務默認情況下都是在拋出unchecked exception後纔會觸發事務的回滾

unchecked異常,即運行時異常runntimeException 回滾事務;

checked異常,即Exception可try{}捕獲的不會回滾.當然也可配置spring參數讓其回滾.

spring的事務邊界是在調用業務方法之前開始的,業務方法執行完畢之後來執行commit or rollback(Spring默認取決於是否拋出runtime異常).

如果拋出runtime exception 並在你的業務方法中沒有catch到的話,事務會回滾。

一般不需要在業務方法中catch異常,如果非要catch,在做完你想做的工作後(比如關閉文件等)一定要拋出runtime exception,否則spring會將你的操作commit,這樣就會產生髒數據.所以你的catch代碼是畫蛇添足。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章