關于Spring事務隔離、傳播屬性與@Transactional注解
mysql默認的隔離級別是repeatable_read
根據(jù)spring文檔,數(shù)據(jù)庫一共有4個隔離級別
- read_uncommit
- read_commited
- 讀已提交 ,解決了臟讀
- repeatable_read
- 可重復讀,解決了不可重復讀
- serializable
- 順序化 ,解決了幻讀
對應的java類,org.springframework.transaction.annotation.Isolation
- 臟讀
- 事務1修改了行1,但是還沒commit,事務2讀取了未commit的行1,事務1回滾了行1;
- 不可重復讀
- 事務1讀了行1,事務2修改了行1并commit,事務1再次讀了行1,發(fā)現(xiàn)行1變了。
- 幻讀
- 事務1讀了滿足where條件的所有行,事務2插入了滿足where的一行,事務1再讀同樣的where條件時,獲取了額外的“幻行”。
spring傳播屬性
spring事務傳播屬性,org.springframework.transaction.annotation.Propagation
,其他有
- required
- 當前有事務,則利用已有事務;當前沒有事務,則創(chuàng)建事務;
- required_new
- 創(chuàng)建新事物,如果存在事務,暫停當前事務;注意這里的措辭,先創(chuàng)建新事務,然后再判斷是否存在事務,如果存在,則暫停;
- supports
- 當前有事務,使用當前事務,否則無事務執(zhí)行;
- nested
- 如果當前存在事務,則創(chuàng)建子事務,其他的就跟required相同;只在特定的事務管理器支持nested,開箱即用的有JDBC DataSourceTransactionManager,有些JTA providers可能也支持nested事務;
- never
- 非事務執(zhí)行,如果有事務則拋出異常;
- mandatory
- 使用當前事務,如果沒有事務則拋出異常;
@Transactional注解
@Transactional注解 事務超時時間:依賴底層事務系統(tǒng),取決于數(shù)據(jù)庫。
- rollbackfor
- 默認RuntimeException回滾;checked exceptions(business exception)不會回滾;
- readonly
- 只能有查詢語句,不能有update、insert語句,僅對required、required_new起作用。
總結(jié)
隔離級別和傳播屬性是兩個概念,隔離級別屬于數(shù)據(jù)庫,傳播屬性是spring的,它們的所有者是不同的;隔離級別是為了解決事物間影響的問題;傳播屬性是為了解決,方法間事務互相利用的問題;
到此這篇關于關于事務隔離、Spring傳播屬性與@Transactional注解的文章就介紹到這了,更多相關事務隔離和Spring傳播屬性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring+SpringMVC+Hibernate整合實例講解
在本篇文章里小編給大家整理的是關于Spring+SpringMVC+Hibernate整合實例講解,需要的朋友們可以學習下。2020-03-03Java批量插入數(shù)據(jù)的代碼實現(xiàn)
日常工作或者學習中,可能會遇到批量插入數(shù)據(jù)的需求,一般情況下數(shù)據(jù)量少的時候,我們會直接調(diào)用批量接口插入數(shù)據(jù)即可,當數(shù)據(jù)量特別大時,我們就會用到分批插入數(shù)據(jù),所以本文給大家介紹了Java批量插入數(shù)據(jù)的代碼實現(xiàn),需要的朋友可以參考下2024-01-01springboot tomcat的maxHttpFormPostSize參數(shù)示例解析
這篇文章主要介紹了springboot tomcat的maxHttpFormPostSize參數(shù)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08spring的TransactionalEventListener事務感知源碼解析
這篇文章主要為大家介紹了spring的TransactionalEventListener事務感知源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09