簡單了解Spring中的事務控制

2022-10-06 20:33:14 字數 2426 閱讀 9664

1.事務的概念

事務是一組操作的執行單元,相對於資料庫的單條操作而言,事務管理的是一組sql指令,如增刪改查等,事務的特性體現在事務內包含的sql指令必須全部執行成功,如果其中一條指令發生錯誤,那麼整個事務內的一組操作都要進行回滾。

事務有四個特性:

2.spring中的事務控制方式

程式設計式事務管理

通過手動編碼控制事務的邊界,可以實現細粒度的事務控制,一般用的較少。

宣告式事務管理

只需要在spring中新增一些配置檔案或者使用註解,即可實現將操作納入事務管理中,事務管理使用了spring aop,降低了**之間的耦合。

3.事務管理器

spring中並沒有直接管理事務,而是將管理事務委託給相應的持久化機制提供的某個特定平台的實現。

事務管理器實現

目標org.springframework.jdbc.datasource.datasourcetransactionmanager

在單一的jdbc datasource中管理事務

org.springframework.orm.hibernate5.hibernatetransactionmanager

當持久化機制是hibernate時,用它來管理事務

org.springframework.jdo.jdot程式設計客棧ransactionmanager

當持久化機制是jdo時,用它來管理事務

org.springframework.transaction.jta.jtatransactionmanager

使用乙個jta實現來管理事務。在乙個事務跨越多個資源時必須使用

org.springframework.orm.ojb.persistencebrokertransactionmanager

當apache的ojb用作持久化機制時,用它來管理事務

4.事務屬性簡介

spring關於事務的註解中有以下幾個屬性(部分)

@transactional(

readonly = false, //讀寫事務

timeout = -1, //超時

norollbackfor = arithmeticexception.class //遇到數學異常不回滾

isolation = isolation.repeatable_read, //事務隔離級別

propagation = propagation.required //事務傳播規則

)5.事務傳播規則

傳播行為

意義required

業務方法需要在乙個事務中執行。如果方法執行時,已經處在乙個事務中,那麼加入到該事務,否則為自己建立乙個新的事務

not_supported

宣告方法不需要事務。如果方法沒有關聯到乙個事務,容器不會為它開啟事務。如果方法在乙個事務中被呼叫,該事務會被掛起,在方法呼叫結束後,原先的事務便會恢復執行

requires_new

屬性表明不管是否存在事務,業務方法總會為自己發起乙個新的事務。如果方法已經執行在乙個事務中,則原有事務會被掛起,新的事務會被建立,直到方法執行結束,新事務才算結束,原先的事務才會恢復執行

mandatory

該屬性指定業務方法只能在乙個已經存在的事務中執行,業務方法不能發起自己的事務。如果業務方法在沒有事務的環境下呼叫,容器就會丟擲異常

supports

這一事務屬性表明,如果業務方法在某個事務範圍內被呼叫,則方法成為該事務的一部分。如果業務方法在事務範圍外被呼叫,則方法在沒有事務的環境下執行

never

指定業務方法絕對不能在事務範圍內執行。如果業務方法在某個事務中執行,容器會丟擲異常,只有業務方法沒有關聯到任www.cppcns.com何事務,才能正常執行

nested

如果乙個活動的事務存在,則執行在乙個程式設計客棧巢狀的事務中. 如果沒有活動事務, 則按required屬性執行.它使用了乙個單獨的事務, 這個事務擁有多個可以回滾的儲存點。內部事務的回滾不會對外部事務造成影響。它只對datasourcetransactionmanager事務管理器起效

6.事務隔離級別

隔離級別

意義default

預設的隔離級別

read程式設計客棧_uncommited

允許你讀取還未提交的改變了的資料。可能導致髒、幻、不可重複讀

read_committed

允許在併發事務已經提交後讀取。可防止髒讀,但幻讀和 不可重複讀仍可發生

repeatable_read

對相同欄位的多次讀取是一致的,除非資料被事務本身改變。可防止髒、不可重複讀,但幻讀仍可能發生

serializable

完全服從事務acid的隔離級別,確保不發生髒、幻、不可重複讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務中涉及的資料表來完成的

本文標題: 簡單了解spring中的事務控制

本文位址: /ruanjian/j**a/260974.html

事務的簡單了解

事務就是資料庫在進行sql的執行的過程,可以是乙個也可以是多個sql。就是一組sql指令,要麼全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是 要麼全部執行成功,要麼撤銷不執行。事務的原子性 表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。事...

事務簡單了解

事務簡單了解 serializable 序列化 可避免髒讀 不可重複讀 幻讀的發生。repeatable read 可重複讀 可避免髒讀 不可重複讀的發生。read committed 讀已提交 可避免髒讀的發生。read uncommitted 讀未提交 最低級別,任何情況都無法保證。type包含...

Spring簡單了解

spring框架由七個定義明確的模組組成 核心容器 spring core 這是spring框架最基礎的部分,它提供了依賴注入 dependencyinjection 特徵來實現容器對bean的管理。這裡最基本的概念是beanfactory,它是任何spring應用的核心。beanfactory是工...