歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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的注解

Copyright © Linux教程網 All Rights Reserved