第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

老師,我是江蘇的小伙伴,我遇到一個事務回滾的問題,不知道是不是我的數據庫版本問題

  1. 我先說下我的環(huán)境差異吧:springboot的版本是一樣的2.0

  2. 數據庫我的是mysql8.0

  3. 依賴是<dependency>
    ???<groupId>mysql</groupId>
    ???<artifactId>mysql-connector-java</artifactId>
    ???<version>8.0.11</version>
    </dependency>
  4. 我在service層用了@Transactional(propagation?=?Propagation.REQUIRED,isolation?=?Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
  5. 但是沒有生效我以為沒有開啟事務,還在啟動入口加了@EnableTransactionManagement
  6. 都沒有回滾
  7. 我最后在切面里改了點東西就可以了,我是這樣改的catch(Exception?e){
    ???log.error("日志記錄發(fā)生錯誤,?errorMessage:?{}",?e.getMessage());
    ???throw??e;
    }
  8. 然后發(fā)現事物就起作用了,不知道這樣改行不行,springboot的事務機制是不能通過切面攔截嗎?
  9. 希望老師解決下我的問題,謝謝啦~

正在回答

2 回答

重點就在于你切面里面的throw e;應該@Transactional原理也是切面捕獲異常,如果你的切面在@Transactional之前將異常給捕獲了并且不拋出,那么事務就會失效。

你可以寫這么兩段代碼(以下為偽代碼)比較一下:

@Transactional
try{
install
1/0
}catch(...){
sout("異常")
}
@Transactional
try{
install
1/0
}catch(...){
sout("異常")
throw?new?Exception()
}

第一段代碼因為已經把異常捕獲了,不拋出,所以事務失效。

第二段代碼就可以成功。

由此問題可以得到一個開發(fā)規(guī)范就是,項目中必須要有自定義異常,在每一個try catch里面都必須拋出一個自定義異常

0 回復 有任何疑惑可以回復我~
#1

慕斯9756157 提問者

謝謝啦,分析的有理有據,受教了!
2018-09-04 回復 有任何疑惑可以回復我~

1、只有在運行時異常時才支持回滾

2、數據庫引擎是InnoDB才支持事物

0 回復 有任何疑惑可以回復我~
#1

慕斯9756157 提問者

按照你的指點,我檢查了一下哦,第一點我用的是1/0,屬于運行時異常; 第二點,我去數據庫查了下show variables like '%storage_engine%';發(fā)現數據庫是{default_storage_engine:InnoDB} 還有哪些可能導致老師的代碼在我的環(huán)境無法正?;貪L呢,另外我的修改對不對呢
2018-06-16 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

老師,我是江蘇的小伙伴,我遇到一個事務回滾的問題,不知道是不是我的數據庫版本問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號