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

首頁 > 學院 > 開發設計 > 正文

Spring事務管理

2019-11-11 02:13:00
字體:
來源:轉載
供稿:網友

SPRing對于數據庫的事務管理,是通過事務管理器進行操作,以下為兩大類配置方法:

一、基于xml配置文件:

<!-- 1,配置事務管理器(根據情況使用合適的事務管理器) -->	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">		<property name="dataSource" ref="dataSource"></property>	</bean>		<!-- 2,配置管理事務的通知 -->	<tx:advice id="txAdvice" transaction-manager="transactionManager">		<!-- 配置方法與事務的關系 -->		<tx:attributes>			<!-- 指定add,delete,update都開啟事務 -->			<tx:method name="save*"/>			<tx:method name="delete*"/>			<tx:method name="update*"/>			<!-- 只讀事務 -->			<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>

		

注意點:

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

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

二、基于注解方式進行事務管理

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

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

2、告知Spring容易,需要使用注解方式來進行事務管理;

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

三、事務傳播行為

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

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

傳播行為:定義關于客戶端和被調用方法的事物邊界

傳播行為

意義

REQUIRED

(默認值)

業務方法需要在一個事務中運行。如果方法運行時,已經處在一個事務中,那么加入到該事務,否則為自己創建一個新的事務

NOT_SUPPORTED

聲明方法不需要事務。如果方法沒有關聯到一個事務,容器不會為它開啟事務。如果方法在一個事務中被調用,該事務會被掛起,在方法調用結束后,原先的事務便會恢復執行

REQUIRES_NEW

屬性表明不管是否存在事務,業務方法總會為自己發起一個新的事務。如果方法已經運行在一個事務中,則原有事務會被掛起,新的事務會被創建,直到方法執行結束,新事務才算結束,原先的事務才會恢復執行

MANDATORY

該屬性指定業務方法只能在一個已經存在的事務中執行,業務方法不能發起自己的事務。如果業務方法在沒有事務的環境下調用,容器就會拋出例外。

SUPPORTS

這一事務屬性表明,如果業務方法在某個事務范圍內被調用,則方法成為該事務的一部分。如果業務方法在事務范圍外被調用,則方法在沒有事務的環境下執行

Never

指定業務方法絕對不能在事務范圍內執行。如果業務方法在某個事務中執行,容器會拋出例外,只有業務方法沒有關聯到任何事務,才能正常執行

NESTED

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平遥县| 英超| 西宁市| 凤庆县| 类乌齐县| 大关县| 高阳县| 长武县| 潞城市| 木里| 山阴县| 吉木萨尔县| 保靖县| 枣阳市| 遂川县| 哈密市| 黄冈市| 交城县| 成都市| 宁陕县| 藁城市| 秦皇岛市| 古交市| 山阴县| 桐城市| 武山县| 深圳市| 哈尔滨市| 左权县| 盈江县| 永城市| 屯门区| 阳春市| 龙岩市| 伽师县| 岑巩县| 灵丘县| 轮台县| 衡阳市| 肥西县| 轮台县|