Spring事務管理

2021-10-07 07:35:30 字數 2820 閱讀 8100

資料庫事務(database transaction)是指作為單個邏輯工作單元執行的一系列操作,要麼完全的執行,要麼完全的不執行。

事務的特點:

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

2.一致性:指的是事務前後資料的完整性必須保持一致

3.隔離性:指多個使用者併發訪問資料庫時,乙個使用者的事務不能被其他使用者的事務所干擾,多個併發事務之間資料要相互隔離。

4.永續性: 指乙個事務一旦提交,它對資料庫中的資料的改變是永久性,即時資料庫發生故障不應該對它有影響

spring對於事務的管理分為兩種:

程式設計式事務

通過編寫**來管理事務,類似於jdbc裡面的通過**來對事務進行提交或者回滾。

優點:事務最細力度可以做到**塊級別。

缺點:會汙染業務**。

宣告式事務

通過使用xml配置檔案或者註解的方式來管理事務,無需編寫**,原理是使用aop進行事務的管理。

優點:不會汙染業務**,通過配置檔案或註解即可完成事務的管理

缺點:事務最細力度只能做到方法級別。

<

!--配置事務管理器--

>

"transactionmanager"

class

="org.springframework.jdbc.datasource.datasourcetransactionmanager"

>

"datasource" ref=

"c3p0"

/>

<

/bean>

配置的形式實現事務

-->

<

!--配置事務處理--

>

"txadvice" transaction-manager=

"transactionmanager"

>

<

!--name: service中要進行事物新增的方法名,可用萬用字元*

propagation: 事物的傳播行為

isolation:事務隔離級別定義;預設為「default」 --

>

"*"/

>

<

/tx:attributes>

<

/tx:advice>

(3)配置aop讓事務生效--

>

"point" expression=

"execution(* cn.gok.services.userservise.*(..))"

/>

"txadvice" pointcut-ref=

"point"

/>

<

/aop:config>

service

public

inte***ce

userservise

serviceimpl

@transactional

(norollbackfor =

)//事務註解 norollbackfor:遇到該異常不做回滾

@override

public

boolean

sendmoney

(string userid, string otherid, double money)

return

false

;}

@transactional中的屬性如下:

propagation :用於設定事務傳播屬性。該屬性型別為 propagation 列舉,預設值為propagation.required。

isolation : 用於設定事務的隔離級別。該屬性型別為 isolation 列舉,預設值為isolation.default。

readonly:用於設定該方法對資料庫的操作是否是唯讀的。該屬性為 boolean,預設值為 false。

timeout:用於設定本操作與資料庫連線的超時時限。單位為秒,型別為 int,預設值為-1,即沒有時限。

rollbackfor:指定需要回滾的異常類。型別為 class,預設值為空陣列。當然,若只有乙個異常類時,可以不使用陣列。

rollbackforclassname: 指定需要回滾的異常類類名。型別為 string,預設值為空陣列。當然,若只有乙個異常類時,可以不使用陣列。

norollbackfor:指定不需要回滾的異常類。型別為 class,預設值為空陣列。當然,若只有乙個異常類時,可以不使用陣列。

norollbackforclassname:指定不需要回滾的異常類類名。型別為 string,預設值為空陣列。當然,若只有乙個異常類時,可以不使用陣列。

併發問題:

spring實現事務隔離

這些常量均是以 isolation開頭。例如 isolationrepeat able_read。

default:採用 db 預設的事務隔離級別。mysql 的預設為 repeatableread;oracle預設為 readcommitted。

read_uncommitted:讀未提交。未解決任何問題。

read_committed:讀已提交。解決髒讀,存在不可重複讀與幻讀。

repeatable_read:可重複讀。解決髒讀、不可重複讀,存在幻讀

serializable:序列化。解決髒讀、不可重複讀,幻讀的問題,效率低。

@transaction預設情況下runtimeexception異常觸發事務回滾

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.一致性 一致性和原子性...