spring 事物管理默認配置下若是,service中try{}catch{}中發生了異常,事物是不會回滾的。spring
Spring默認狀況下會對運行期捕獲到的RunTimeException進行事務回滾。數據庫
例如性能
if(user){ try { userDao.save(user); } catch (Exception e) { } }
在catch中拋出運行時異常供spring捕獲spa
if(user){ try { userDao.save(user); } catch (Exception e) { throw new RuntimeException(); } }
在catch中手動回滾事物,如今在用.net
if(user){ try { userDao.save(user); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }
https://my.oschina.net/u/3714931/blog/1580753code
配置@Transactional的參數blog
@Transactional(rollbackFor=Exception.class)
propagation:事務傳播性設置,Propagation枚舉類型。Spring支持的事務傳播屬性包括7種:事務
PROPAGATION_MANDATORY:方法必須在事務中執行,不然拋出異常。 PROPAGATION_NESTED:使方法運行在嵌套事務中,不然和PROPAGATION_REQUIRED同樣。 PROPAGATION_NEVER :當前方法永遠不在事務中運行,不然拋出異常。 PROPAGATION_NOT_SUPPORTED:定義爲當前事務不支持的方法,在該方法執行期間正在運行的事務會被暫停 PROPAGATION_REQUIRED:當前的方法必須運行在事務中,若是沒有事務就新建一個事務。新事務和方法一塊兒開始,隨着方法返回或者拋出異常時終止。 PROPAGATION_REQUIRED_NEW :當前方法必須新建一個事務,若是當前的事務正在運行則暫停。 PROPAGATION_SUPPORTS :規定當前方法支持當前事務,可是若是沒有事務在運行就使用非事務方法執行。
isolation:事務隔離性級別設置,Isolation枚舉類型get
ISOLATION_DEFAULT :使用數據庫默認的隔離級別 ISOLATION_COMMITTED:容許其餘事務已經提交的更新(防止髒讀取) ISOLATION_READ_UNCOMMITTED:容許讀取其餘事務未提交的更新,會致使三個缺陷發生。執行速度最快 ISOLATION_REPEATABLE_READ :除非事務自身更改了數據,不然事務屢次讀取的數據相同(防止髒數據,屢次重複讀取) ISOLATION_SERIALIZABLE:隔離級別最高,能夠防止三個缺陷,可是速度最慢,影響性能。
readOnly:讀寫性事務,只讀性事務,布爾型io
timeout:超時時間,單位秒
rollbackFor:一組異常類的實例,遇到時必須進行回滾
rollbackForClassname:一組異常類的名字,遇到時必須進行回滾
noRollbackFor:一組異常類的實例,遇到時必須不回滾
noRollbackForClassname:一組異常類的名字,遇到時必須不回滾