首先需要配置乙個 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.一致性 一致性和原子性...