1. 程式人生 > 其它 >spring事務在什麼情況下會失效?

spring事務在什麼情況下會失效?

原因一:打@Transactional註解的但是不是用public來修飾的類或者方法會失效,但不會報錯

原因二:不帶事務的方法呼叫該類中帶事務的方法,不會回滾。因為spring的回滾是用過代理模式生成的,如果是一個不帶事務的方法呼叫該類的帶事務的方法,直接通過this.xxx()呼叫,而不生成代理事務,所以事務不起作用。常見解決方法,拆類。

原因三:java的設計中,它認為不繼承RuntimeException的異常是”checkException”或普通異常,如IOException,這些異常在java語法中是要求強制處理的。對於這些普通異常,spring預設它們都已經處理,所以預設不回滾。可以新增rollbackfor=Exception.class來表示所有的Exception都回滾

注:

那什麼是unchecked,什麼是checked呢?通俗的說,編譯器能檢測到的是checked,檢測不到的就是unchecked。

派生於Error或者RuntimeException(比如空指標,1/0)的異常稱為unchecked異常。

繼承自Exception的異常統稱為checked異常,如 IOException、TimeoutException等。