Spring中事務(wù)支持的重要類:
TransactionDefinition
Spring支持的7種事務(wù)類型:
PROPAGATION_REQUIRED:表示當(dāng)前方法必須運(yùn)行在事務(wù)中。如果當(dāng)前事務(wù)存在,方法將會(huì)在該事務(wù)中運(yùn)行辫继。否則蚌本,會(huì)啟動(dòng)一個(gè)新的事務(wù)离熏。
PROPAGATION_SUPPORTS:表示當(dāng)前方法不需要事務(wù)上下文突想,但是如果存在當(dāng)前事務(wù)的話欠啤,那么該方法會(huì)在這個(gè)事務(wù)中運(yùn)行刀诬。
PROPAGATION_MANDATORY:表示該方法必須在事務(wù)中運(yùn)行咽扇,如果當(dāng)前事務(wù)不存在,則會(huì)拋出一個(gè)異常陕壹。
PROPAGATION_REQUIRES_NEW:表示當(dāng)前方法必須運(yùn)行在它自己的事務(wù)中质欲。一個(gè)新的事務(wù)將被啟動(dòng)。如果存在當(dāng)前事務(wù)糠馆,在該方法執(zhí)行期間嘶伟,當(dāng)前事務(wù)會(huì)被掛起。如果使用JTATransactionManager的話又碌,則需要訪問(wèn)TransactionManager九昧。
PROPAGATION_NOT_SUPPORTED:表示該方法不應(yīng)該運(yùn)行在事務(wù)中。如果存在當(dāng)前事務(wù)毕匀,在該方法運(yùn)行期間铸鹰,當(dāng)前事務(wù)將被掛起。如果使用JTATransactionManager的話皂岔,則需要訪問(wèn)TransactionManager掉奄。
PROPAGATION_NEVER:表示當(dāng)前方法不應(yīng)該運(yùn)行在事務(wù)上下文中。如果當(dāng)前正有一個(gè)事務(wù)在運(yùn)行凤薛,則會(huì)拋出異常姓建。
PROPAGATION_NESTED:表示如果當(dāng)前已經(jīng)存在一個(gè)事務(wù),那么該方法將會(huì)在嵌套事務(wù)中運(yùn)行缤苫。嵌套的事務(wù)可以獨(dú)立于當(dāng)前事務(wù)進(jìn)行單獨(dú)地提交或回滾速兔。如果當(dāng)前事務(wù)不存在,那么其行為與PROPAGATION_REQUIRED一樣活玲。注意各廠商對(duì)這種傳播行為的支持是有所差異的涣狗。可以參考資源管理器的文檔來(lái)確認(rèn)它們是否支持嵌套事務(wù)舒憾。
- 關(guān)鍵配置代碼
<bean id="jdbcManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
<!--①通過(guò)以下配置為所有繼承BaseService類的所有子類的所有public方法都添加事務(wù)增強(qiáng)-->
<aop:config proxy-target-class="true">
<aop:pointcut id="serviceJdbcMethod"
expression="事務(wù)作用域"/>
<aop:advisor pointcut-ref="serviceJdbcMethod" advice-ref="jdbcAdvice" order="0"/>
</aop:config>
<tx:advice id="jdbcAdvice" transaction-manager="jdbcManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
免責(zé)聲明
以上內(nèi)容記錄自http://blog.csdn.net/hy6688_/article/details/44763869 及http://www.mamicode.com/info-detail-1248286.html镀钓,侵刪。