Spring事務使用注意事項

Spring提供的事務使用起來很方便,一個@Transactional註解就搞定全部,但是如果不注意,也會踩坑

提到事務就應該想到至少以下幾點:

1、在事務方法中加鎖,可能會導致鎖失效

無論是JVM自帶的鎖,還是分佈式鎖,都有可能出現沒鎖住的情況

原因是解鎖先於事務提交,一旦鎖釋放後其它線程就可以獲取到鎖了,由於事務還沒提交,所以新線程讀到的還是舊數據(跟前一個線程讀取到的數據是一樣的),這就相當於多個線程做了一模一樣的事情了。

正確的做法是:要麼別加事務,要麼把鎖加在事務方法外面

2、調用內部(同一個類中)方法的話,事務不會生效

3、事務方法被聲明成private或者final,導致事務不生效

4、聲明回滾的異常類型與拋出的異常不一致,或者異常被吞掉了。

(PS:默認捕獲到RuntimeException和Error類型的異常纔會回滾)

 

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