Spring聲明式事務(wù)功能應(yīng)該是大家應(yīng)用Spring中使用的最多的功能之一了,的確該功能極大的簡(jiǎn)化了大家對(duì)數(shù)據(jù)庫(kù)操作的。目前Spring支持的聲明式事務(wù)有兩個(gè)配置方式,一種是XML配置方式,另一種是注解方式
針對(duì)配置這塊,XML配置同學(xué)們會(huì)覺(jué)得比較麻煩,特別是針對(duì)事務(wù)屬性的配置,所以補(bǔ)充一下本塊配置說(shuō)明,特分享給大家,希望對(duì)大家有幫助。
下面是Spring的XML配置事務(wù)比較常用的方式,也是我們這邊事務(wù)XML配置事務(wù)的使用方式,本文以該種配置為例,進(jìn)行說(shuō)明。
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
配置詳解說(shuō)明如下:
TransactionInterceptor 是聲明式事務(wù)攔截器。可以由Spring AOP攔截器進(jìn)行回調(diào)。
transactionAttributes 是事務(wù)屬性的配置說(shuō)明,也是大家覺(jué)得比較不好配置,不太容易記憶的地方
它的配置規(guī)則如下:因?yàn)槎加星熬Y標(biāo)識(shí),所以順序可以修改。
(PROPAGATION_NAME,ISOLATION_NAME,readOnly,timeout_NNNN,+Exception1,-Exception2)
PROPAGATION_REQUIRED 事務(wù)的傳播級(jí)別(以PROPAGATION_開頭). 可設(shè)置值說(shuō)明如下:
PROPAGATION_REQUIRED 使用當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),則開啟新事務(wù)
PROPAGATION_SUPPORTS 當(dāng)前有事務(wù)則用,沒(méi)有事務(wù)則不用
PROPAGATION_MANDATORY 當(dāng)前有事務(wù)就用,沒(méi)有事務(wù)則報(bào)錯(cuò)(必須要用事務(wù))
PROPAGATION_REQUIRES_NEW 當(dāng)前有事務(wù)則掛起原事務(wù),新啟事務(wù)(必開新事務(wù))
PROPAGATION_NOT_SUPPORTED 不使用事務(wù),如果當(dāng)前有事務(wù),則掛起事務(wù)
PROPAGATION_NEVER 不能有事務(wù),如果當(dāng)前有事務(wù),則報(bào)錯(cuò)(必須沒(méi)有事務(wù))
PROPAGATION_NESTED 同 PROPAGATION_REQUIRED
ISOLATION_DEFAULT 事務(wù)隔離級(jí)別(以ISOLATION_開頭)
ISOLATION_DEFAULT 使用數(shù)據(jù)庫(kù)默認(rèn)事務(wù)
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
readOnly
如果設(shè)置,則表示只讀事務(wù),如果不設(shè)置,則表示讀來(lái)事務(wù)
TIMEOUT_DEFAULT 事務(wù)超時(shí)設(shè)置(timeout_ 開頭)
單位是秒。 例如 timeout_20, 則表示事務(wù)超時(shí)時(shí)間是20秒。
+Exception 表示遇到該異常時(shí),執(zhí)行回滾
–Exception 表示遇到該異常時(shí),不執(zhí)行加滾
transactionManager 是事務(wù)管理器,針對(duì)不同的持久層,事務(wù)都會(huì)提供不同的實(shí)現(xiàn)。其接口都是org.springframework.transaction.PlatformTransactionManager
XML配置事務(wù)方式的優(yōu)點(diǎn)就是不用改任何代碼,希望此份配置詳解可以對(duì)大家有幫助