作者:Mint6
來源:http://39sd.cn/53D5D
Java阿里巴巴規范提示:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中顯示的rollback,
例外的分類
先來看看例外的分類

error是一定會回滾的,
這里Exception是例外,他又分為運行時例外RuntimeException和非運行時例外

可查的例外(checked exceptions):Exception下除了RuntimeException外的例外
不可查的例外(unchecked exceptions):RuntimeException及其子類和錯誤(Error)
如果不對運行時例外進行處理,那么出現運行時例外之后,要么是執行緒中止,要么是主程式終止,
如果不想終止,則必須捕獲所有的運行時例外,決不讓這個處理執行緒退出,佇列里面出現例外資料了,正常的處理應該是把例外資料舍棄,然后記錄日志,不應該由于例外資料而影響下面對正常資料的處理,
非運行時例外是RuntimeException以外的例外,型別上都屬于Exception類及其子類,如IOException、SQLException等以及用戶自定義的Exception例外,對于這種例外,JAVA編譯器強制要求我們必需對出現的這些例外進行catch并處理,否則程式就不能編譯通過,所以,面對這種例外不管我們是否愿意,只能自己去寫一大堆catch塊去處理可能的例外,
@Transactional 的寫法
開始主題@Transactional如果只這樣寫,
Spring框架的事務基礎架構代碼將默認地 只 在拋出運行時和unchecked exceptions時才標識事務回滾,
也就是說,當拋出個RuntimeException 或其子類例的實體時,(Errors 也一樣 - 默認地 - 標識事務回滾,)從事務方法中拋出的Checked exceptions將不被標識進行事務回滾,
1 讓checked例外也回滾:在整個方法前加上 @Transactional(rollbackFor=Exception.class)
2 讓unchecked例外不回滾:@Transactional(notRollbackFor=RunTimeException.class)
3 不需要事務管理的(只查詢的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
注意:如果例外被try{}catch{}了,事務就不回滾了,如果想讓事務回滾必須再往外拋try{}catch{throw Exception},
注意
Spring團隊的建議是你在具體的類(或類的方法)上使用 @Transactional 注解,而不要使用在類所要實作的任何介面上,
你當然可以在介面上使用 @Transactional 注解,但是這將只能當你設定了基于介面的代理時它才生效,因為注解是不能繼承的,這就意味著如果你正在使用基于類的代理時,那么事務的設定將不能被基于類的代理所識別,而且物件也將不會被事務代理所包裝(將被確認為嚴重的),因此,請接受Spring團隊的建議并且在具體的類上使用 @Transactional 注解,
@Transactional 注解標識的方法,處理程序盡量的簡單,尤其是帶鎖的事務方法,能不放在事務里面的最好不要放在事務里面,可以將常規的資料庫查詢操作放在事務前面進行,而事務內進行增、刪、改、加鎖查詢等操作,
最后
私信回復 資料 領取一線大廠Java面試題總結+阿里巴巴泰山手冊+各知識點學習思維導+一份300頁pdf檔案的Java核心知識點總結!
這些資料的內容都是面試時面試官必問的知識點,篇章包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多執行緒并發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java演算法、資料庫、Zookeeper、分布式快取、資料結構等等,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110724.html
標籤:Java
上一篇:學習Java語言有什么好處?
