6.1、spring的事務管理器
spring框架並沒有直接管理使用者的應用系統中的事務,它只是提供許多供使用者選擇的事務管理器,然後將事務管理的責任委託給與此事務管理器對應的持久化技術的事務實現。
事務管理實現
使用時機
org.springframework.jdbc.datasource.
datasourcetransactionmanager
在單一的jdbc datasource中管理事務
org.springframework.orm.hibernate3.
hibernatetransactionmanager
當持久化機制是hibernate時,用它來管理職務
org.springframework.orm.
jpa.jpatransactionmanager
當jpa用作持久化時,用它來管理職務
org.springframework.transaction.
jta.jtatransactionmanager
使用乙個jta實現來管理事務。在乙個事務跨越多個資源時必須使用
配置檔案中的配置如下:
6.2、事務屬性介紹
1>.傳播行為
傳播行為
說明propagation_required
必須在乙個事務中執行。如果當前有乙個事務正在進行,該方法將會在那個事務中執行。否則要開始乙個新事務。spring事務傳播行為的預設值。
propagation_supports
支援現有的事務。如果當前沒有事務在進行,就以非事務的方式執行
propagation_mandatory
方法必須在乙個現有事務中進行,否則會丟擲異常。
propagation_requires_new
必須在它自己的新啟事務裡進行。如果現有事務在進行就先暫停它
propagation_not_supported
不應在事務中進行。如果現有事務在進行就先暫停它
propagation_never
不應在事務中進行。如果現有事務在進行就丟擲異常
propagation_nested
如果現有事務正在進行,則該方法執行在乙個巢狀式事務中。否則propagation_required執行
2>.隔離級別
隔離級別
說明isolation_default
使用底層資料庫預設的隔離級別spring事務隔離級別的預設值
isolation_read_uncommited
充許另乙個事務可以讀到這個事務未提交的資料可能導致髒讀、不可重複讀和幻讀。
isolation_read_commited
保證乙個事務修改的資料提交後才能被另乙個事務讀取可能導致不可重複讀和幻讀。
isolation_repeatable_read
要求對相同欄位的多次讀取的結果必須相同,除非事務本身更新了資料可能導致幻讀。
isolation_serializable
事務被處理為順序執行可以防止髒讀、不可重複讀、幻讀。
3>.唯讀提示
如果事務只對後端資料進行讀操作,則後端資料庫可以採用一些優化措施來提高執行效率。但必須在事務中才有效。也就是說要搭配傳播行為propagation_required,propagation_requires_new,propagation_nested 來設定。
4>.事務超時間隔
還可以設定事務的超時間隔,讓事務在特定秒數後自動回滾,不必等它自己結束。由於計時是從事事務開始時算起的,所以它也得搭配傳播行為為 propagation_required,propagation_requires_new,propagation_nested 來設定。
5>.回滾規則
當事務執行過程中丟擲異常時,事務可以被宣告為回滾或者不回滾。預設情況下只在出現runtimeexceptio才會回滾,而在出現受檢異常時不回滾。
當然,也可以改變這種回滾規則,可以宣告乙個事務在出現特定的受檢異常時能回滾。也可以宣告乙個事務在出現特定的非受檢異常時不回滾。
6.3、宣告式事務管理
1>.基於xml配置方式
第1步:定義事務通知
第2部:把事務通知繫結到切入點
xml**
<?xml version="1.0" encoding="utf-8"?>
xmlns:xsi=""
xmlns:aop=""
xmlns:tx=""
xsi:schemalocation="
/spring-beans-2.5.xsd
/spring-aop-2.5.xsd
/spring-tx-2.5.xsd">
class="org.springframework.jdbc.datasource.drivermanagerdatasource">
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
expression="execution(* com.zxf.service.*.*(..))" />
2>.基於註解方式
第1步:在spring配置檔案中啟用對aspectj註解的支援
xml**
<?xml version="1.0" encoding="utf-8"?>
xmlns:xsi=""
xmlns:aop=""
xmlns:tx=""
xsi:schemalocation="
/spring-beans-2.5.xsd
/spring-aop-2.5.xsd
/spring-tx-2.5.xsd">
class="org.springframework.jdbc.datasource.drivermanagerdatasource">
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
class="com.zxf.service.accountservicebytxannotation">
第2步:用@transactional註解指定介面、類或方法的事務屬性
j**a**
package com.zxf.service;
import j**a.util.list;
import org.springframework.transaction.annotation.transactional;
import com.zxf.dao.accountdao;
import com.zxf.domain.account;
/** account業務邏輯類--基於註解方式的宣告式事務管理配置 */
@transactional //指定需要宣告式事務,事務屬性使用預設值
public class accountservicebytxannotation
} 原文
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.一致性 一致性和原子性...