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

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

Spring事務(wù)管理

2019-11-10 23:58:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

一、基于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都開(kāi)啟事務(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后,只是攔截了對(duì)應(yīng)的方法,并沒(méi)有做任何動(dòng)作,需要再通知中加入tx:attribute 和 tx:method約定需要開(kāi)啟事務(wù)的方法;

2、在匹配的方法中,直接具有事務(wù)管理功能,無(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,開(kāi)啟使用注解方式管理事務(wù) -->	<tx:annotation-driven transaction-manager="transactionManager"/>注意點(diǎn):

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

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

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

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

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

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

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

傳播行為

意義

REQUIRED

(默認(rèn)值)

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

NOT_SUPPORTED

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

REQUIRES_NEW

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

MANDATORY

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

SUPPORTS

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

Never

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

NESTED

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阜南县| 正安县| 宿迁市| 新宾| 时尚| 英德市| 保定市| 海兴县| 兴安县| 高清| SHOW| 龙门县| 江阴市| 垫江县| 东方市| 武山县| 沙河市| 绥棱县| 方城县| 宝坻区| 商城县| 岐山县| 两当县| 垣曲县| 万年县| 青冈县| 丹巴县| 满洲里市| 北海市| 阿克苏市| 历史| 洪湖市| 融水| 平泉县| 临夏市| 衡东县| 象州县| 西和县| 赤壁市| 河津市| 南召县|