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

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

Spring事務管理

2019-11-11 00:55:26
字體:
來源:轉載
供稿:網友

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) ,則可以完成,當其他事務回滾時,日志方法仍生效;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 秭归县| 平顶山市| 信宜市| 宁南县| 定兴县| 蒙自县| 达拉特旗| 阳谷县| 昌图县| 湟中县| 通辽市| 格尔木市| 全椒县| 舒兰市| 甘南县| 屯留县| 泰州市| 视频| 正安县| 兴隆县| 剑河县| 安福县| 华阴市| 平昌县| 石楼县| 济源市| 岳阳市| 涿鹿县| 北辰区| 锡林郭勒盟| 虞城县| 许昌市| 仁寿县| 宿州市| 阿勒泰市| 中卫市| 上虞市| 商丘市| 日喀则市| 白沙| 金平|