国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Spring事務(wù)管理

2019-11-11 00:19:44
字體:
供稿:網(wǎng)友

SPRing對于數(shù)據(jù)庫的事務(wù)管理,是通過事務(wù)管理器進(jìn)行操作,以下為兩大類配置方法:

一、基于xml配置文件:

<!-- 1,配置事務(wù)管理器(根據(jù)情況使用合適的事務(wù)管理器) -->	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">		<property name="dataSource" ref="dataSource"></property>	</bean>		<!-- 2,配置管理事務(wù)的通知 -->	<tx:advice id="txAdvice" transaction-manager="transactionManager">		<!-- 配置方法與事務(wù)的關(guān)系 -->		<tx:attributes>			<!-- 指定add,delete,update都開啟事務(wù) -->			<tx:method name="save*"/>			<tx:method name="delete*"/>			<tx:method name="update*"/>			<!-- 只讀事務(wù) -->			<tx:method name="query*" read-only="true"/>		</tx:attributes>		</tx:advice>		<!-- 3,配置AOP -->	<aop:config>		<!-- 切面 -->		<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.stephen..*Service*.*(..))"/>			</aop:config>

		

注意點(diǎn):

1、配置了切面的切入點(diǎn)pointcut后,只是攔截了對應(yīng)的方法,并沒有做任何動作,需要再通知中加入tx:attribute 和 tx:method約定需要開啟事務(wù)的方法;

2、在匹配的方法中,直接具有事務(wù)管理功能,無需再進(jìn)行硬編碼;

二、基于注解方式進(jìn)行事務(wù)管理

<!-- 1,配置事務(wù)管理器(根據(jù)情況使用合適的事務(wù)管理器) -->	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">		<property name="dataSource" ref="dataSource"></property>	</bean>		<!-- 2,開啟使用注解方式管理事務(wù) -->	<tx:annotation-driven transaction-manager="transactionManager"/>注意點(diǎn):

1、注解方式同樣需要先配置事務(wù)管理器;

2、告知Spring容易,需要使用注解方式來進(jìn)行事務(wù)管理;

3、在需要事務(wù)管理的方法或者類上使用@Transactional 注解修飾, 方法上的注解優(yōu)先于類上的;

三、事務(wù)傳播行為

一個業(yè)務(wù)方法中如果存在多個事務(wù)嵌套一起,默認(rèn)情況下事務(wù)會同時作用,如果需要事務(wù)獨(dú)立作用,例如日志事務(wù),其他事務(wù)出錯后,日志事務(wù)仍生效,則需要使用事務(wù)傳播行為。

1、注解方式中@Trasactional的屬性propagation,其中有

傳播行為:定義關(guān)于客戶端和被調(diào)用方法的事物邊界

傳播行為

意義

REQUIRED

(默認(rèn)值)

業(yè)務(wù)方法需要在一個事務(wù)中運(yùn)行。如果方法運(yùn)行時,已經(jīng)處在一個事務(wù)中,那么加入到該事務(wù),否則為自己創(chuàng)建一個新的事務(wù)

NOT_SUPPORTED

聲明方法不需要事務(wù)。如果方法沒有關(guān)聯(lián)到一個事務(wù),容器不會為它開啟事務(wù)。如果方法在一個事務(wù)中被調(diào)用,該事務(wù)會被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會恢復(fù)執(zhí)行

REQUIRES_NEW

屬性表明不管是否存在事務(wù),業(yè)務(wù)方法總會為自己發(fā)起一個新的事務(wù)。如果方法已經(jīng)運(yùn)行在一個事務(wù)中,則原有事務(wù)會被掛起,新的事務(wù)會被創(chuàng)建,直到方法執(zhí)行結(jié)束,新事務(wù)才算結(jié)束,原先的事務(wù)才會恢復(fù)執(zhí)行

MANDATORY

該屬性指定業(yè)務(wù)方法只能在一個已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果業(yè)務(wù)方法在沒有事務(wù)的環(huán)境下調(diào)用,容器就會拋出例外。

SUPPORTS

這一事務(wù)屬性表明,如果業(yè)務(wù)方法在某個事務(wù)范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分。如果業(yè)務(wù)方法在事務(wù)范圍外被調(diào)用,則方法在沒有事務(wù)的環(huán)境下執(zhí)行

Never

指定業(yè)務(wù)方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行。如果業(yè)務(wù)方法在某個事務(wù)中執(zhí)行,容器會拋出例外,只有業(yè)務(wù)方法沒有關(guān)聯(lián)到任何事務(wù),才能正常執(zhí)行

NESTED

如果一個活動的事務(wù)存在,則運(yùn)行在一個嵌套的事務(wù)中. 如果沒有活動事務(wù), 則按REQUIRED屬性執(zhí)行.它使用了一個單獨(dú)的事務(wù), 這個事務(wù)擁有多個可以回滾的保存點(diǎn)。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響。它只對DataSourceTransactionManager事務(wù)管理器起效

在日志方法中使用@Transactional(propagation = Propagation.REQUIRES_NEW) ,則可以完成,當(dāng)其他事務(wù)回滾時,日志方法仍生效;


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 治县。| 蚌埠市| 仙居县| 宿州市| 安多县| 辽宁省| 大英县| 沈丘县| 尤溪县| 丹江口市| 永修县| 通河县| 聂拉木县| 黎平县| 徐闻县| 洪洞县| 玛多县| 兰西县| 八宿县| 拜城县| 呼玛县| 乐清市| 平度市| 焦作市| 始兴县| 平果县| 高密市| 闽清县| 嵊州市| 丹阳市| 乌什县| 新安县| 衡水市| 正宁县| 宜章县| 页游| 饶阳县| 昌平区| 咸阳市| 合江县| 阿城市|