SpringBoot宣告式事務的簡單運用

2021-08-21 01:22:51 字數 2426 閱讀 7917

關於事物的基本概念等這裡就不介紹了。

spring宣告式事物的實現,有兩種方式;第一種是配置xml,第二種是使用相關註解(這兩種方式可詳見《程式設計師成長筆記(一)》的相關章節)。springboot中預設配置了第二種方式,所以,springboot直接使用註解即可。下面介紹springboot通過註解開啟事物的使用。

第一步:在啟動類上開啟事物支援

屬性說明

propagation

事務的傳播行為,預設值為 required。

isolation

事務的隔離度,預設值採用 default

timeout

事務的超時時間,預設值為-1,不超時。

如果設定了超時時間(單位秒),那麼如果超過該時間限制了但事務還沒有完成,則自動回滾事務。

read-only

指定事務是否為唯讀事務,預設值為 false;為了忽略那些不需要事務的方法,比如讀取資料,可以設定 read-only 為 true。

rollbackfor

用於指定能夠觸發事務回滾的異常型別,如果有多個異常型別需要指定,各型別之間可以通過逗號分隔。

norollbackfor

丟擲 no-rollback-for 指定的異常型別,不回滾事務。

……事務的傳播行為是指,如果在開始當前事務之前,乙個事務上下文已經存在,此時有若干選項可以指定乙個事務性方法的執行行為。

即:在執行乙個@transactinal註解標註的方法時,開啟了事務;當該方法還在執行中時,另乙個人也觸發了該方法;

那麼此時怎麼算事務呢,這時就可以通過事務的傳播機制來指定處理方式。

在transactiondefinition定義中包括了如下幾個表示傳播行為的常量:常量

含義transactiondefinition.propagation_required

如果當前存在事務,則加入該事務;如果當前沒有事務,則建立乙個新的事務。這是預設值。

transactiondefinition.propagation_requires_new

建立乙個新的事務,如果當前存在事務,則把當前事務掛起。

transactiondefinition.propagation_supports

如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。

transactiondefinition.propagation_not_supported

以非事務方式執行,如果當前存在事務,則把當前事務掛起。

transactiondefinition.propagation_never

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

transactiondefinition.propagation_mandatory

如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。

transactiondefinition.propagation_nested

如果當前存在事務,則建立乙個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於transactiondefinition.propagation_required。

同乙個事務裡面,對某一條資料的增刪改、 都會影響到這個事務裡面接下來的對這個條數的增刪改查,如(舉例部分情況):示例

結論 乙個事務裡面,debug未完成時, 資料會入庫嗎? 不會

乙個事務裡面,執行一半時,程式莫名停了,資料會回滾嗎? 會

同乙個事務裡面,插入(資料a) -> 查詢(資料a) -> 修改(資料a) -> 插入(資料a),可以嗎? 可以

同乙個事務裡面,插入(資料a) -> 修改(資料a) -> 再次修改(資料a) -> 查詢(資料a),可以嗎? 可以

同乙個事務裡面,插入(資料a) -> 修改(資料a) -> 刪除(資料a),可以嗎? 可以

……事務場景中,丟擲異常被catch後,如果需要回滾,一定要手動回滾事務。

如:使用

代替:

注:不需要@transactional註解。

宣告式事務

宣告式事務編輯以方法為單位,進行事物控制 丟擲異常,事物回滾。最小的執行單位為方法。決定執行成敗是通過是否丟擲異常來判斷的,丟擲異常即執行失敗 宣告式事務 declarative transaction management 是spring提供的對程式事務管理的方式之一。spring的宣告式事務顧名...

宣告式事務

開啟事務,就需要在spring的配置檔案中配置事務管理器 id datasourcetransactionmanager class org.springframework.jdbc.datasource.datasourcetransactionmanager name datasource re...

宣告式事務

程式設計式事務 指的是由程式設計師編寫事務控制 包含事務的提交與回滾等。宣告式事務 事務控制 已經由spring寫好,程式設計師只需要宣告出哪些方法需要進行事務控制和如何進行事務控制。宣告式事務都是針對serviceimpl類下的方法的 事務管理器是基於通知 advice 的 service介面 p...