1. 程式人生 > >Transaction rolled back because it has been marked as rollback-only

Transaction rolled back because it has been marked as rollback-only

解決辦法 框架 捕獲 back 結束 tro 接口 lba -o

出現這種錯誤的原因

1.接口A 調用了接口B

2.接口B報異常了,沒有在B裏面進行try catch捕獲

3.接口A對 接口B進行了try catch捕獲

因為接口B報異常 會把當前事物A接口的事物(如果B沒有開啟新的事物) 標誌成rollback-only

然後因為接口A對B進行了try catch 所以接口A會一直往下走,等接口結束commit的時候會報錯

org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only

因為A的事物 被B標誌成rollback-only了

解決辦法

1.B接口裏面就對異常做try catch處理

2.B接口裏面新開一個事物

3.不對接口B進行try catch處理 這樣會自動把B的錯誤拋出來,而不是報上面那個錯

一直以為 遇到異常 try catch 不會影響到當前的事物,但是Spring管理的事物,並不是這樣。這個問題 是別人跟了半天源碼才幫我解決

所以,有時間跟一跟框架的源碼 才能更好的理解框架 而不是花大量時間去研究怎麽使用框架

Transaction rolled back because it has been marked as rollback-only