在學 spring boot 的時候,突然遇到了 spring 的事務問題,由於之前沒有認真的看過這塊的內容,最近在看,就認真的整理下文件,留乙個存檔。
事務(transaction)是併發控制單元,邏輯上的一組操作,這組操作要麼全部成功,要麼全部失敗。
資料庫向使用者提出儲存當前程式狀態的方法,叫事務提交(commit);當在執行過程中,使資料庫忽略當前的狀態並回到前面儲存狀態的方法叫事務回滾(rollback)。
所謂說的事務管理就是指:按照給定的事務規則來執行提交或者回滾操作
spring 事務管理高層抽象主要包括 3 個介面
spring 並不直接管理事務,而是提供多種事務管理器,具體實現對事務管理進行管理的是 hibernate 或者 jta 等持久化機制提供的相關平台框架。spring 事務管理器的介面是: org.springframework.transaction.platformtransactionmanager ,通過這個介面,spring 為各個平台 jdbc、hibernate 等提供事務管理器,具體實現就是各個平台的事情了。
platformtransactionmanager 介面的原始碼
public inte***ce platformtransactionmanager()...
transactiondefinition 事務定義
事務管理器介面(platformtransactionmanager)中的gettransaction(transactiondefinition definition)方法來得到乙個事務,裡面的引數就是transactiondefinition類,這個類定義了一些基本的事務屬性。
一些事務的問題解釋:
不可重複度和幻讀區別:
不可重複讀的重點是修改,幻讀的重點在於新增或者刪除。
例1(同樣的條件, 你讀取過的資料, 再次讀取出來發現值不一樣了 ):事務1中的a先生讀取自己的工資為 1000的操作還沒完成,事務2中的b先生就修改了a的工資為2000,導 致a再讀自己的工資時工資變為 2000;這就是不可重複讀。
例2(同樣的條件, 第1次和第2次讀出來的記錄數不一樣 ):假某工資單表中工資大於3000的有4人,事務1讀取了所有工資大於3000的人,共查到4條記錄,這時事務2 又插入了一條工資大於3000的記錄,事務1再次讀取時查到的記錄就變為了5條,這樣就導致了幻讀。
隔離級別說明(五種):
事務傳播行為(七種):
事務的傳播行為是解決業務層之間的相互呼叫的問題
支援當前事務的情況:
不支援當前事務的情況:
其他情況
transactiondefinition 介面的原始碼
public inte***ce transactiondefinition
transactionstatus 事務狀態
transactionstatus 介面用來記錄事務的狀態,該介面定義了一組方法,用來獲取或判斷事務的相應狀態資訊。
platformtransactionmanager.gettransaction(…) 方法返回乙個 transactionstatus 物件。返回的transactionstatus 物件可能代表乙個新的或已經存在的事務(如果在當前呼叫堆疊有乙個符合條件的事務)。
transactionstatus介面介面內容如下:
public inte***ce transactionstatus
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...
spring 事務管理
和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...