spring事務傳播

2021-09-01 13:53:21 字數 2327 閱讀 2177

採用程式設計式事務

1、 getcurrentsession()與opensession()的區別?

* 採用getcurrentsession()建立的session會繫結到當前執行緒中,而採用opensession()建立的session則不會

* 採用getcurrentsession()建立的session在commit或rollback時會自動關閉,而採用opensession建立的session必須手動關閉

2、使用getcurrentsession()需要在hibernate.cfg.xml檔案中加入如下配置:

* 如果使用的是本地事務(jdbc事務)

ex t_class」>thread

* 如果使用的是全域性事務(jta事務)

jta採用宣告式事務

宣告式事務配置

* 配置sessionfactory

* 配置事務管理器

* 事務的傳播特性

* 那些類哪些方法使用事務

2、編寫業務邏輯方法

* 繼承hibernatedaosupport類,使用hibernatetemplate類持久化,hibernatetemplate

是hibernate session的封裝

* 預設的回滾是runtime exception(包括繼承runtimeexception的子類),普通異常不回滾

* 在編寫業務邏輯方法時,最好將異常一直往上丟擲,在呈現層處理(str uts)

* spring的事務需要設定到業務方法上(事務邊界定義到facade類上),不要新增到dao上

3、了解事務的集中傳播忒性

1、propagation_required:如果存在乙個事務,則支援當前事務。如果沒有事務則開啟。

2、propagation_supports:如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行。

3、propagation_mandatory:如果已經存在乙個事務,支援當前事務。如果沒有乙個活動的事務,則丟擲異常。

4、propagation_requires_new:總是開啟乙個新的事務。如果乙個事務存在,則將這個存在的事務掛起。

5、propagation_not_supported:總是非事務地執行,並掛起任何存在的事務。

6、propagation_never:總是非事務地執行,如果存在乙個活動事務,則丟擲異常。

7、 propagation_nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中,如果沒有活動事務,則按transactiondefinition.propagation_required屬性執行

4、spring事務的隔離級別

1、 isolation_default: 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。

2、isolation_read_uncommitted:這是事務最低的隔離級別,它允許另外乙個事務可以看到這個事務未提交的資料。

3、isolation_read_committed:保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。

4、isolation_repeatalbe_read: 這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻想讀。它除了保證乙個事務不能讀取另外乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。

5、isolation_serializable 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不課重複讀外,還避免了幻想讀。

事務屬性

t1t2

required無t1

t2t1

requirednew無t1

t2t2

support無t1

無t1mandatory無t1

拋異常t1

nosupport無t1

無無never無t1

無拋異常

àid =」sessionfacory」class=」org.springframework.orm .hibernate3.localsessionfactorybean」>

cat ion」>

classpath:hibernate.cfg.xml

dd *」 propagation=」required」/>

//唯讀提高了效能

cut id=」allmanagermethod」 expr ession=」execution(* com.bjsxt.usermgr.manager.*.*(..))」/>

使用為@transactional(propagation=propagation.required,rollbackfor = exception.class)

Spring事務傳播

required 預設 如果當前存在事務,就加入該事務,如果不存在,則建立乙個新的事務 supports 如果呼叫者有事務,則加入該事務,如果沒有,則以非事務方式執行 mandatory 如果存在事務,則加入該事務,如果不存在事務,則拋異常 requires new 重新建立乙個新的事務,如果當前存...

Spring事務傳播

package org.springframework.transaction import org.springframework.lang.nullable public inte ce transactiondefinition 事務的傳播面向的是乙個方法在另乙個方法中執行時對事務的處理方式。...

spring事務以及事務傳播

事務必須服從acid原則。acid指的是原子性 atomicity 一致性 consistency 隔離性 isolation spring的事務管理的幾種實現方式 1.程式設計式 首先基於pojo的話一般就是用這種,在 中呼叫begintransaction commit rollback 等事務...