springboot 事務管理例項

2021-09-20 03:57:34 字數 2983 閱讀 3455

@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)
readonly=true唯讀,不能更新,刪除

@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 事務管理

新建的spring boot專案中,一般都會引用spring boot starter或者spring boot starter web,而這兩個起步依賴中都已經包含了對於spring boot starter jdbc或spring boot starter data jpa的依賴。當我們使用了這...

spring boot 的事務管理

方法一 註解的事物管理 在進行資料庫操作的時候就會遇到事務管理,插入的時候要加 transactional註解進行事務的回滾。兩個插入語句如果其中乙個執行失敗,則兩條插入語句都不能執行。方法二 spring配置檔案的事務管理,如上面 所示 1宣告式事務管理 1 配置事物管理器 2 配置註解驅動 3 ...

springboot事務管理詳解

隔離級別public enum isolationread uncommitted 該隔離級別表示乙個事務可以讀取另乙個事務修改但還沒有提交的資料。該級別不能防止髒讀和不可重複讀,因此很少使用該隔離級別。read committed 該隔離級別表示乙個事務只能讀取另乙個事務已經提交的資料。該級別可以...