Spring Boot 事務的使用

2021-08-14 19:29:54 字數 2655 閱讀 6220

標籤: spring

2016-01-27 17:26

85380人閱讀收藏 

舉報spring boot 使用事務非常簡單,首先使用註解 @enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 @transactional 便可。

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

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

@enabletransactionmanagement

// 啟註解事務管理,等同於xml配置方式的

public

class

@bean

public object testbean(platformtransactionmanager platformtransactionmanager)

public

static

void

main(string args)

}

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

**如下:

@enabletransactionmanagement

public

class

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

@bean

public platformtransactionmanager txmanager(datasource datasource)

@bean

public object testbean(platformtransactionmanager platformtransactionmanager)

public

static

void

main(string args)

}

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

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

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

@enabletransactionmanagement

// 開啟註解事務管理,等同於xml配置檔案中的

public

class

implements

transactionmanagementconfigurer

// 建立事務管理器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()

}

注: 

如果spring容器中存在多個 platformtransactionmanager 例項,並且沒有實現介面 transactionmanagementconfigurer 指定預設值,在我們在方法上使用註解 @transactional 的時候,就必須要用value指定,如果不指定,則會丟擲異常。

對於系統需要提供預設事務管理的情況下,實現介面 transactionmanagementconfigurer 指定。

對有的系統,為了避免不必要的問題,在業務中必須要明確指定 @transactional 的 value 值的情況下。不建議實現介面 transactionmanagementconfigurer,這樣控制台會明確丟擲異常,開發人員就不會忘記主動指定。

Spring Boot 事務的使用

spring boot 使用事務非常簡單,首先使用註解 enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 transactional 便可。關於事務管理器,不管是jpa還是jdbc等都實現自介面 platformtransacti...

Spring Boot 事務的使用

spring boot 使用事務非常簡單,首先使用註解 enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 transactional 便可。關於事務管理器,不管是jpa還是jdbc等都實現自介面 platformtransacti...

Spring Boot 事務的使用

spring boot 使用事務非常簡單,首先使用註解 enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 transactional 便可。關於事務管理器,不管是jpa還是jdbc等都實現自介面 platformtransacti...