spring 事務註解

2021-08-28 22:51:04 字數 4152 閱讀 5347

配置檔案:

value=>

class=>

上面配置的意思就是配置面向切面,只要servcie中的方法丟擲exception,那麼insert,update,delete的sql方法都會回滾。測試時,可以在service方法中故意丟擲乙個異常,throw new exception("test"); 那麼資料庫就不會執行成功。所以在開發時,如果需要對多張表進行操作,而又需要保持事務的一致性的時候,我們就可以把對多張表的操作,寫在乙個service中的方法中,這樣如果有一張表執行失敗,丟擲異常,其他表的操作也會跟著回滾。

引數說明

readonly

是否是唯讀事務,true表示唯讀,false表示讀寫

timeout

事務超時秒數,預設值-1表示永不超時

isolation

隔離級別,例如(isolation = isolation.read_uncommitted)

propagation

事務傳播行為,見表propagation說明,例如@transactional(propagation=propagation.required)

rollbackfor

需要回滾的異常類陣列,例如

單一異常類:@transactional(rollbackfor=runtimeexception.class)

多個異常類:@transactional(rollbackfor=)

norollbackfor

不需要進行回滾的異常類陣列,......

rollbackforclassname

需要進行回滾的異常類名稱陣列,例如

單一異常類名稱:@transactional(rollbackforclassname="runtimeexception")

多個異常類名稱:@transactional(rollbackforclassname=)

norollbackforclassname

不需要進行回滾的異常類名稱陣列,......

引數說明

required

有事務,加入事務,沒有新建乙個

not_supported

以非事務方式執行操作,如果當前存在事務,就把當前事務掛起

requires_new

新建事務,如果當前存在事務,把當前事務掛起

mandatory

使用當前的事務,如果當前沒有事務,就丟擲異常

never

以非事務方式執行,如果當前存在事務,則丟擲異常

supports

支援當前事務,如果當前沒有事務,就以非事務方式執行

nested

如果當前存在事務,則在巢狀事務內執行,如果當前沒有事務,則執行與required類似的操作

q:我們的工程裡,事務的開啟跟關閉是由spring負責的,但具體的sql語句卻是由mybatis執行的。那麼問題來了,mybatis怎麼保證自己執行的sql語句是處在spring的事務上下文中?

仔細思考一下這個過程,@transactional是由spring進行處理的,spring做的事情是從資料來源(一般為資料庫連線池,比如說druid,c3p0等)獲取乙個資料庫連線,然後在進入方法邏輯前執行setautocommit(false)操作,最後在處理成功或者出現異常的時候分別執行commit或者rollback操作。

那麼問題來了,開啟跟結束事務是由spring獲取到資料庫連線以後進行操作的,但我們實際執行的update或者insert語句卻是由mybatis獲取資料庫連線進行操作的,可以想到如果想讓事務生效,那麼spring跟mybatis使用的必須是同乙個連線,真實情況是什麼樣呢?它們之間如何進行無縫銜接?讓我們通過原始碼來分析一下。

spring事務註解

transactional只能被應用到public方法上,對於其它非public的方法,如果標記了 transactional也不會報錯,但方法沒有事務功能.spring使用宣告式事務處理,預設情況下,如果被註解的資料庫操作方法中發生了unchecked異常,所有的資料庫操作將rollback 如果...

spring 事務註解

spring 事務註解 預設遇到throw new runtimeexception 會回滾 需要捕獲的throw new exception 不會回滾 指定回滾 transactional rollbackfor exception.class public void methodname 指定不...

spring事務註解

transactional只能被應用到public方法上,對於其它非public的方法,如果標記了 transactional也不會報錯,但方法沒有事務功能.spring使用宣告式事務處理,預設情況下,如果被註解的資料庫操作方法中發生了unchecked異常,所有的資料庫操作將rollback 如果...