Spring事務管理

2021-06-20 13:19:19 字數 3059 閱讀 2957

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置;程式設計式就是用註解的方式寫到**裡。下面先說宣告式:

spring配置檔案中關於事務配置總是由三個組成部分,分別是datasource、transactionmanager和**機制這三部分,無論哪種配置方式,一般變化的只是**機制這部分。 

datasource、transactionmanager這兩部分只是會根據資料訪問方式有所變化,比如使用hibernate進行資料訪問時,datasource實際為sessionfactory,transactionmanager的實現為hibernatetransactionmanager。 下面一起看看三種宣告式事務的具體配置:

宣告式事務

公共配置

classpath:config/hibernate.cfg.xml

com.entity

第一種,使用tx標籤方式

expression="execution(* com.dao.*.*(..))"

其中第乙個*代表返回值,第二*代表dao下子包,第三個*代表方法名,「(..)」代表方法引數。

第二種,使用**方式

propagation_required, -exception

propagation_required, -exception

propagation_required, -exception

propagation_required, readonly

將transactionproxy的abstract屬性設定為"true",然後將具體的dao的parent屬性設定為"transactionproxy",可以精簡**。

第三種,使用***

propagation_required, -exception

propagation_required, -exception

propagation_required, -exception

propagation_required, readonly

transactioninterceptor

*dao

spring事務型別詳解:

propagation_required--支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇。

propagation_supports--支援當前事務,如果當前沒有事務,就以非事務方式執行。

propagation_mandatory--支援當前事務,如果當前沒有事務,就丟擲異常。

propagation_requires_new--新建事務,如果當前存在事務,把當前事務掛起。

propagation_not_supported--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

propagation_never--以非事務方式執行,如果當前存在事務,則丟擲異常。

propagation_nested--如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與propagation_required類似的操作。

程式設計式事務

程式設計式即採用註解的方式,需要注意的是,使用註解的方式需要在spring的配置檔案中加入一句話:,其作用是開啟註解的方式。具體配置如下:

classpath:config/hibernate.cfg.xml

com.entity

註解檔案:

package com.dao;

import org.springframework.orm.hibernate3.hibernatetemplate;

import org.springframework.transaction.annotation.propagation;

import org.springframework.transaction.annotation.transactional;

import com.entity.user;

@transactional

public class userdaoimpl_bak extends hibernatetemplate

@transactional(propagation=propagation.required,rollbackforclassname="exception")

public void modifyuser(user user)

@transactional(propagation=propagation.required,rollbackforclassname="exception")

public void deluser(string username)

@transactional(readonly=true)

public void selectuser()

}

類頭的@transactional為預設事務配置,如方法沒有自己的事務型別,則按預設事務,如有自己的配置,則按自己的配置。

以上四種配置方式最常用的還是第

一、二種,第三種是比較老舊的方式,而註解的方式不太適合比較大的專案,用於簡單的小專案還是很好的,其特點就是簡單明瞭。每種方法都有每種方法的特點跟適用的環境,沒有絕對的好與壞,只不過前兩種在實際的工作當中用的更多一些。

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...

spring 事務管理

和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...

spring事務管理

一 什麼是事務 事務指的是邏輯上的一組操作,這組操作要麼全部成功,要麼全部失敗。例如 銀行轉賬,如果張三給李四轉1000元,那麼李四得收到這1000元,假如中間出現異常,停電或者其他原因,張三的錢轉出去了,而李四沒收到,這就出大問題了,顧需要事務來管理 二 事務的特性 1 原子性 是指事務是乙個不可...