1. 程式人生 > >Spring事務控制和回滾

Spring事務控制和回滾

get not 拋出異常 tle 配置 set checked 事務配置 攔截器

1在一個項目中ssh結構,spring2.5,事務控制采用的是tx攔截器的方式。

自己寫了個 int a=1/0;異常拋出了,但是事務還是提交了,怎麽搞都不行。

現將看到的一些事務控制總結下來:

事務控制默認回滾RuntimeException(數組越界,結果為0等),並且是notchecked異常。

註意:sql內部出現異常默認不會回滾

如果在Service中有 try ..catch的形式,則無法拋出異常,不會回滾。因此需要在catch中throw new runtimeException在方法上加上主動拋出。

在tx部分要註意可以設置 <tx:method roback-for=‘Exception‘,捕獲自己指定的異常。如果使用聲明式註解則為@Transactional(robackFor=Exception.class)

如果以上的方式還不行,就只能在Service的catch中使用以下的手動拋出。

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

參考文章:

(Spring transaction事務 roll back各種回滾)https://www.cnblogs.com/wangchuanfu/p/8110159.html

(Spring事務之使用tx標簽配置攔截器)http://blog.sina.com.cn/s/blog_486c3b620100xuh7.html

(Spring2.5事務配置的5種方法)https://www.cnblogs.com/gaoyoubo/articles/1861464.html

(Spring 事務屬性分析)https://www.cnblogs.com/aliger/p/3898869.html

(Spring聲明式事務不回滾問題)http://www.jianshu.com/p/f5fc14bde8a0

(spring事務沒回滾)https://www.cnblogs.com/lidelin/p/7266280.html

Spring事務控制和回滾