SpringBoot框架之事務詳解

2021-09-02 19:38:42 字數 3215 閱讀 2886

事務(transaction)是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。是為解決資料安全操作提出的,事務控制實際上就是控制資料的安全訪問。spring事務處理詳解

這裡主要講宣告式註解@transactional。步驟如下所示:

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

1.簡單開啟事務管理

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

(1)指定回滾

@transactional(rollbackfor=exception.class) 

public void methodname()

(2)指定不回滾

@transactional(norollbackfor=exception.class)

public itimdaoimpl getitemdaoimpl()

(3)如果有事務,那麼加入事務,沒有的話新建乙個(不寫的情況下)

@transactional(propagation=propagation.required)
(4)容器不為這個方法開啟事務

@transactional(propagation=propagation.not_supported)
(5)readonly=true唯讀,不能更新,刪除

@transactional (propagation = propagation.required,readonly=true)
(6)設定超時時間

@transactional (propagation = propagation.required,timeout=30)
(7)設定資料庫隔離級別

@transactional (propagation = propagation.required,isolation=isolation.default)
3.指定事務管理器

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

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

(1)列印專案事務管理器

@bean

public object testbean(platformtransactionmanager platformtransactionmanager)

public static void main(string args) }

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

(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)使用指定的事務管理器

@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() }

spring boot之事務使用

spring boot的事務使用非常簡單,分為以下兩步 在入口類上新增註解 enabletransactionmanagement即可開啟事務 package com.bsqs.shop.order import org.springframework.cloud.client.discovery....

Apache Camel框架之事務控制

本文簡單介紹一下apache camel如何對route進行事務控制,首先介紹整個route只涉及到乙個事務參與者的情況,然後再介紹route中涉及到多個事務參與者的情況.camel是通過和spring的框架整合進行事務控制的.1,整個route只有乙個事務參與者,區域性事務 這裡用jms的例子,後...

PHP ORM框架ezpdo(3)之事務

ezpdo也有事務處理了,可以支援自動事務回滾和手工回滾 首先看自動回滾的事務 獲得 ezpdo管理器 m epmanager instance os m find from someclass as c where c.var x if os o os 0 用start t 開始事務 m star...