Spring的事務機制:java
默認spring事務只在發生未被捕獲的 RuntimeExcetpion時纔回滾。spring
換句話說在service的方法中不使用try catch 或者在catch中最後加上throw new RuntimeExcetpion(),這樣程序異常時才能被aop捕獲進而回滾。 .net
spring aop 異常捕獲原理:代理
被攔截的方法需顯式拋出異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認狀況下aop只捕獲RuntimeException的異常,但能夠經過配置來捕獲特定的異常並回滾。事務
總結:get
- service層中的方法使用try-catch捕獲異常可是沒有拋出異常,事務不會回滾。
- service的方法中不使用try catch 或者在catch中最後加上throw new RuntimeException(),事務發生回滾,由於spring默認事務回滾機制爲RuntimeException,aop只捕獲RuntimeException的異常。而且在service上層Controller層要繼續捕獲這個異常並處理。
- 能夠經過Spring事務配置來捕獲特定的異常並回滾 (指定rollback-for)
- 若是service層的方法有事務回滾支持,那麼在該方法中調用的任何方法或者自己程序運行拋出異常,事務都會回滾。異常類型必須是在spring中配置過的,或者拋出的是RuntimeException。