
關注我,每天三分鐘,帶你輕松掌握一個Java相關知識點。
spring實作事務的方式有兩種,程式設計式和聲明式。
程式設計式是指在寫業務代碼中将事務代碼也寫進去,這是很古老的做法了,在現在看起來可能不可思議。
在spring一統天下後,aop的思想深入人心,聲明式實作事務也為廣大程式員使用。我們今天講的@Transaction就是聲明式事務的一種實作方式。
在之前的文章中,我們聊過了事務的ACID、事務的傳播特性以及事務的隔離級别,其實這些都是事務需要關注的一個面,那麼事務究竟有幾個方面需要我們掌握呢?
這裡需要注明一下,也有人把復原規則不作為事務屬性,其實怎麼了解無所謂,這都是為了對事務有一個全面的了解。
那麼我們沒有說過的復原規則、是否隻讀和逾時時間是幹什麼的呢?
復原規則:預設情況下隻有未檢查異常(RuntimeException和Error類型的異常)會導緻事務復原. 而受檢查異常不會。
事務的復原規則可以通過@Transactional 注解的 rollbackFor 和 noRollbackFor 屬性來定義。這兩個屬性被聲明為 Class[] 類型的, 是以可以為這兩個屬性指定多個異常類。
是否隻讀:在類和方法上标注,表明該類下所有方法或者該方法隻是查詢,不會涉及到修改、增加和删除,因為事務對于資料庫來說,是筆不小的開支,資料庫引擎針對隻讀事務能做優化來提高性能。
逾時時間:事務本質是在資料庫中獲得鎖,但是如果讓它無限的霸占資源,很可能會導緻性能問題,逾時時間就是規定該事務在復原之前能占用資源多久。
@Transactional 注解可以加載類上,也可以加在方法上,如果加在類上,則表用這個方法中所有的public類都有事務,而方法上則事務隻針對這個方法。
注意,這個注解隻對public方法有效。
在javaweb開發中,我們一般将事務注解放到service層。
以上就是今天的知識點,各位小夥伴get到嗎?創作不易,望各位多多點贊收藏,有什麼建議可以留言告訴我,我會積極采納!