Spring事物@Transactional 事物使用詳解

spring對於事務異常的處理

//unchecked   運行期Exception   spring默認會進行事務回滾     比如:RuntimeException

//checked     用戶Exception     spring默認不會進行事務回滾   比如:Exception


如何改變spring的這種默認事務行爲?可以通過在方法上

添加@Transactional(noRollbackFor=RuntimeException.class)讓spring對於RuntimeException不回滾事務

添加@Transactional(RollbackFor=Exception.class)讓spring對於Exception進行事務的回滾



@Transactional(propagation=Propagation.REQUIRED)

required爲默認行爲




如果只是內部的try/catch塊出現異常只會導致內部try/catch塊的事務的回滾,則內部try/catch塊的操作不會被執行,但是另外的操作任然會執行。

而如果外部出現異常則會導致整個事務的回滾,那麼所有的操作都不會被執行,即使內部try/catch塊沒有出現異常。


@Transactional(readOnly=true)

只讀屬性,不允許進行更新操作,可以提高效率



@Transactional(timeout=30)

超時,默認爲30秒



@Transactional(isolation=Isolation.REPEATABLE_READ)

事務隔離級別

MYSQL默認爲第三種級別REPEATABLE_READ

MSSQLSERVER2000默認爲第二種級別READ_COMMITTED

MSSQLSERVER2005可以設爲第二三種級別而且效率不會比第二種級別差


級別越高,效率越低


事物內部新起異步方法,會導致出現異常時異步方法內的數據庫操作行爲不回滾,因此事物內部儘量少使用異步方法

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