今兒沒事,想對代碼中事務進行測試,因而乎就建立了一個單元測試進行測試,發如今方法中加上@Transactional註解後,發如今想數據庫中插入數據時,代碼執行成功,但數據庫中卻沒有數據,因而各類檢查,好比:數據庫
一、讓checked例外也回滾:在整個方法前加上 @Transactional(rollbackFor=Exception.class) 二、讓unchecked例外不回滾: @Transactional(notRollbackFor=RunTimeException.class) 三、不須要事務管理的(只查詢的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 注意: 若是異常被try{...}catch{...}了,事務就不回滾了,若是想讓事務回滾必須再往外拋try{...}catch{throw Exception}。
但是....,仍是不能解決問題。單元測試
冥冥之中,忽然和一位同事討論時,看到了這樣一段話:測試
爲了使測試數據不對數據庫形成污染,在使用Spring_JUnit進行的單元測試的時候,默認會對事務進行回滾,即@Rollback 默認是true,若是想要測試數據不回滾,可設置@Rollback(value = false) 。若是是使用MySQL數據庫,在設置了自動回滾以後,若是發現事務依然沒有回滾,那麼能夠查看一下數據庫引擎是不是Innodb,由於其餘的數據庫引擎如MyISAM、Memory 都不支持事務。
spa
明白了,在單元測試中,事務是默認回滾了.........net
參考:https://blog.csdn.net/howard789/article/details/77801892code