Spring實現宣告式事務

2022-05-07 12:30:12 字數 1984 閱讀 5267

事務就是把一系列的動作當成乙個獨立的工作單元,這些動作要麼全部完成,要麼全部不起作用。

事務四個屬性acid

模擬sql執行異常

搭建乙個基本的增刪改查環境

listuserlist();

int insert(user user);

int delete(integer id);

} from user;

insert into mybatis.user values (#,#,#);

delete where id = #

編寫乙個userservice的實現類,模擬執行錯誤

@service

public class userserviceimpl implements userservice

@override

public void crud()

}

測試

public class userserviceimpltest 

}

測試結果分析

在上述測試中,先執行了查詢全部user方法,輸出了結果

然後執行了新增操作,插入了乙個user使用者

最後執行刪除操作,出現異常,但是插入操作還是成功了

因為沒有進行事務的管理;我們想讓他們都成功才成功,有乙個失敗,就都失敗,我們就應該需要事務!

以前我們都需要自己手動管理事務,十分麻煩!但是spring給我們提供了事務管理,我們只需要配置即可;

spring在不同的事務管理api之上定義了乙個抽象層,使得開發人員不必了解底層的事務管理api就可以使用spring的事務管理機制。spring支援程式設計式事務管理和宣告式的事務管理。

程式設計式事務管理

宣告式事務管理

使用spring管理事務,注意標頭檔案的約束匯入 : tx

xmlns:tx=""

/spring-tx.xsd

事務管理器

jdbc事務

配置好事務管理器後我們需要去配置事務的通知

spring事務傳播特性:

事務傳播行為就是多個事務方法相互呼叫時,事務如何在這些方法間傳播。spring支援7種事務傳播行為:

spring預設的事務傳播行為是propagation_required,它適合於絕大多數的情況。

假設 servivex#methodx() 都工作在事務環境下(即都被 spring 事務增強了),假設程式中存在如下的呼叫鏈:service1#method1()->service2#method2()->service3#method3(),那麼這 3 個服務類的 3 個方法通過 spring 的事務傳播機制都工作在同乙個事務中。

就好比,我們剛才的幾個方法存在呼叫,所以會被放在一組事務當中!

配置aop

匯入aop的標頭檔案!

進行測試

刪掉剛才插入的資料,再次測試!

@test

public void crud()

通過測試我們發現,刪除出現問題時,事務回滾,前面的插入操作沒有成功

思考問題?

為什麼需要配置事務?

Spring宣告式事務

net.sf.hibernate.dialect.oracle9dialect false true net.sf.hibernate.transaction.jdbctransactionfactory 1025 用heibernate來管理事務 當用spring和heibernate一起完成da...

spring宣告式事務

1.什麼是事務 事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性 要麼成功,要麼失敗 2.事務的特性 事務特性分為四個 原子性 atomicity 一致性 consistency 隔離性 isolation 持續性 durability ...

Spring 宣告式事務

propagation 事務傳播機制有如下幾種 required 預設值,表示如果存在乙個事務,則支援當前事務 如果沒有事務,則開啟乙個新事務。requires new 表示總是開啟乙個新的事務,如果乙個事務已經存在,則將這個存在的事務掛起,開啟新事務執行該方法。mandatory 表示如果存在乙個...