Spring AOP 事務管理

2021-07-08 17:01:21 字數 2796 閱讀 1485

首先需要配置乙個 bean 稱之為事務管理器。有datasourcetransactionmanager、hibernatetransactionmanager等。

然後用tx:advice標籤配置事務。tx即是transaction的簡寫。定義事務屬性:傳播、隔離級別、讀寫、超時、異常。

最後用 aop 方式配置新增事務的切點

id="txmanager"

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

name="datasource"

ref="datasource" />

bean>

id="txadvice"

transaction-manager="txmanager">

name="query*"

read-only="true" />

name="find*"

read-only="true" />

tx:attributes>

tx:advice>

advice-ref="txadvice"

pointcut="execution(* *..service..*.*(..))"/>

aop:config>

name:方法名的匹配模式,通知根據該模式尋找匹配的方法。

propagation:設定事務定義所用的傳播級別。

isolation:設定事務的隔離級別。

timeout:指定事務的超時(秒)。

read-only:該屬性為true指示事務是唯讀的

no-rollback-for:以逗號分隔的異常類的列表,目標方法可以跑出這些異常而不會導致通知執行回滾

rollback-for:以逗號分隔的異常類的列表,當目標方法跑出這些異常時會導致通知執行回滾。預設情況下,該列表為空,因此不在no-rollback-for列表中的任何執行時異常都會導致回滾。

isolation_default 預設級別(對大多數資料庫來說就是isolation_read_committed)

isolation_read_uncommitted 最低的隔離級別。事實上我們不應該隔離級別,因為在事務完成前,其他事務可以看到該事務所修改的資料。而在其他事務提交前,該事務也可以看到其他事務所做的修改。

isolation_read_committed 大多數資料庫的預設級別。在事務完成前,其他事務無法看到該事務所修改的資料。遺憾的是,在該事務提交後,你就可以檢視其他事務插入活更新的資料。這意味著在事務的不同點上,如果其他事務修改資料,你會看到不同的資料。

isolation_repeatable_read 該隔離級別確保如果在事務中查詢了某個資料集,你至少還能再次查詢到相同的資料集,即使其他事務修改了所查詢的資料。然而如果其他事務插入了新資料,你就可以查詢到該新插入的資料。

isolation_serializable 代價最大、可靠性最高的隔離級別,所有的事務都是俺順序乙個接乙個的執行。

propagation_required 當前如果有事務,spring就會使用該事務;否則會開始乙個新事務。

propagation_supports 當前如果有事務,spring就會使用該事務;否則不會開啟乙個新事務。

propagation_mandatory 當前如果有事務,spring就會使用該事務;否則會丟擲異常。

propagation_requires_new spring總會開始乙個新事務。如果當前有事務,則該事務掛起。

propagation_not_supported spring不會執行事務中的**。**總是在非事務環境下執行,如果當期有事務,則該事務掛起。

propagation_never 即使當前有事務,spring也會在飛事務環境下執行。如果當前有事務,則丟擲異常。

propagation_nested 如果當前有事務,則在巢狀事務中執行。如果沒有,那麼執**況與propagation_required一樣。

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

modifiers-pattern 表示public、protected等,省略則表示任意。

ret-type-pattern 表示返回值型別,不能省略,用 * 匹配任意。

declaring-type-pattern 表示包路徑和類名稱,省略則表示任意。

name-pattern 表示方法名稱,不能省略,用 * 匹配任意。

param-pattern 表示引數,不能省略,用 .. 匹配任意,用 * 匹配乙個引數。

throws-pattern 表示異常,省略則表示任意。

下面給出一些通用切入點表示式的例子。

execution(public * *(..)) 任意公共方法

execution(* set*(..)) 任何乙個名字以「set」開始的方法

execution(* com.xyz.service.accountservice.*(..) accountservice介面定義的任意方法

execution(* com.xyz.service..(..)) 在service包中定義的任意方法

execution(* com.xyz.service...(..)) 在service包或其子包中定義的任意方法

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