spring事務管理

    事務指的是邏輯上的一組操作,這組操作要麼全部成功,要麼全部失敗

特性:

原子性:指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生

一致性:指事務前後數據的完整性必須保持一致

隔離性:指多個用戶併發訪問數據庫時,一個用戶的事務不能被其他用戶的事務所幹擾,多個併發事務之間數據要相互隔離

持久性:指一個事務一旦被提交,它對數據庫中數據的改變是永久性的

Spring事務管理高層抽象主要包括3個接口

PlatformTramsactionManager(事務管理器)、TransactionDefinition(事務定義信息(隔離、傳播、超時、只讀))、TransactionStatus(事務具體運行狀態)

    Spring爲不同的持久化框架提供了不同PlatformTramsactionManager接口的實現

使用Spring JDBC或iBatis進行持久化數據時使用:org.springframework.jdbc.datasource.DataSourceTransactionManager

使用Hibernate3.0版本進行持久化數據時使用:org.springframework.orm.hibernate3.HibernateTransactionManager

    事務隔離級別(ISOLATION)

DEFAULT:使用後端數據庫默認的隔離級別

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

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

REPEATABLE_READ:對相同字段的多次讀取是一致的,除非數據被事務本身改變。可防止髒、不可重複讀,但幻讀仍可能發生。

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

Mysql默認採用REPEATABLE_READ隔離級別

Oracle默認採用READ_COMMITTED隔離級別

    事務傳播行爲

PROPAGATION_REQUIRED:支持當前事務,如果不存在就新建一個(兩個操作在一個事務裏)

PROPAGATION_REQUIRES_NEW:如果有事務存在,掛起當前事務,創建一個新的事務(兩個操作不在一個事務裏

PROPAGATION_NESTED:如果當前事務存在,則嵌套事務執行(事務保存點)

    Spring支持兩種方式事務管理

編程式的事務管理:通過TransactionTemplate手動管理事務,實際應用中很少用

使用XML配置聲明式事務:Spring的聲明式事務是通過AOP實現的,開發中推薦使用

    *基於TransactionProxyFactoryBean的方式(很少使用)

    *基於AspectJ的XML方式(經常使用)

        *一旦配置好之後,類上不需要添加任何東西

    *基於註解方式(經常使用)

        *配置簡單。需要在業務層類上添加一個@Transactional的註解。


本文出自 “11828641” 博客,請務必保留此出處http://11838641.blog.51cto.com/11828641/1898030

發佈了78 篇原創文章 · 獲贊 26 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章