SpringBoot事務註解詳解

2021-08-07 09:59:05 字數 3494 閱讀 6442

關係型資料庫多用到事務,在傳統專案中使用xml配置,配置雖然也還好,但是看著很不美觀,在使用springboot框架,就簡單的多了,以實戰為準,直接上**

@transactional

spring 事務註解

1.簡單開啟事務管理

@enabletransactionmanagement // 啟註解事務管理,等同於xml配置方式的
2.事務註解詳解

預設遇到throw new runtimeexception("…");會回滾

需要捕獲的throw new exception("…");不會回滾

@transactional(rollbackfor=exception.class) 

public void methodname()

@transactional(norollbackfor=exception.class)

public itimdaoimpl getitemdaoimpl()

@transactional(propagation=propagation.required)
@transactional(propagation=propagation.not_supported)
@transactional(propagation=propagation.requires_new)
@transactional(propagation=propagation.mandatory)
@transactional(propagation=propagation.never)
@transactional(propagation=propagation.supports) 

/*public void methodname()

other失敗了不會影響 本類的修改提交成功

本類update的失敗,other也失敗

*/

@transactional(propagation=propagation.nested)

@transactional (propagation = propagation.required,readonly=true)
@transactional (propagation = propagation.required,timeout=30)
@transactional (propagation = propagation.required,isolation=isolation.default)
spring boot 使用事務非常簡單,首先使用註解 @enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 @transactional 便可。

關於事務管理器,不管是jpa還是jdbc等都實現自介面 platformtransactionmanager 如果你新增的是 spring-boot-starter-jdbc 依賴,框架會預設注入 datasourcetransactionmanager 例項。如果你新增的是 spring-boot-starter-data-jpa 依賴,框架會預設注入 jpatransactionmanager 例項。

你可以在啟動類中新增如下方法,debug測試,就能知道自動注入的是 platformtransactionmanager 介面的哪個實現類。

3.1 列印專案事務管理器

@bean

public object testbean(platformtransactionmanager platformtransactionmanager)

public static void main(string args) }

這些springboot為我們自動做了,這些對我們並不透明,如果你專案做的比較大,新增的持久化依賴比較多,我們還是會選擇人為的指定使用哪個事務管理器。

**如下:

3.2 指定事務管理器

@enabletransactionmanagement

// 其中 datasource 框架會自動為我們注入

@bean

public platformtransactionmanager txmanager(datasource datasource)

@bean

public object testbean(platformtransactionmanager platformtransactionmanager)

public static void main(string args)

}

在spring容器中,我們手工註解@bean 將被優先載入,框架不會重新例項化其他的 platformtransactionmanager 實現類。

然後在service中,被 @transactional 註解的方法,將支援事務。如果註解在類上,則整個類的所有方法都預設支援事務。

對於同乙個工程中存在多個事務管理器要怎麼處理,請看下面的例項,具體說明請看**中的注釋。

3.1 使用指定的事務管理器

@resource(name="txmanager2")

private platformtransactionmanager txmanager2;

// 建立事務管理器1

@bean(name = "txmanager1")

public platformtransactionmanager txmanager(datasource datasource)

// 建立事務管理器2

@bean(name = "txmanager2")

public platformtransactionmanager txmanager2(entitymanage***ctory factory)

// 實現介面 transactionmanagementconfigurer 方法,其返回值代表在擁有多個事務管理器的情況下預設使用的事務管理器

@override

public platformtransactionmanager annotationdriventransactionmanager()

public static void main(string args)

}@component

public class devsendmessage implements sendmessage

// 在存在多個事務管理器的情況下,如果使用value具體指定

// 則預設使用方法 annotationdriventransactionmanager() 返回的事務管理器

@transactional

public void send2()

}

SpringBoot事務註解詳解

transactional spring 事務註解 1.簡單開啟事務管理 enabletransactionmanagement 啟註解事務管理,等同於xml配置方式的2.事務註解詳解 預設遇到throw new runtimeexception 會回滾 需要捕獲的throw new excepti...

springboot註解式事務詳解

springboot使用事務需要在啟動類上加上開啟事務註解 enabletransactionmanagement 事物註解方式 transactional 當標於類前時,標示類中所有方法都進行事物處理 例子 service transactional public class logservice...

快速上手SpringBoot事務註解

什麼是事務 資料庫事務,是指作為單個邏輯工作單元執行的一系列操作,要麼完全執行,要麼完全不執行 事務的特性 原子性 乙個事務中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。一致性 在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。隔離性 防止多個事務併發執行時由於交叉執行而...