Spring 配置事务

Spring的事务配置有两种:1、基于注解;2、基于XML文件

一、基于注解

配置流程:

1、Spring配置文件配置需要加入:

<!-- 配置事物管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource" /><!-- ref:引入数据源  -->
</bean>
<!-- 启动事物注解 transaction-manager的值必须和上面这个bean的id一样-->
<tx:annotation-driven transaction-manager="transactionManager"/>

2、在需要使用事务的方法上面加入@Transactional注解。

@Transactional注解的属性:

1)事物的传播行为:propagation,即当前事物方法被另一个事物方法调用时如何使用事物,默认取值为REQUIRED,即使用调用的方法的事物。

2)事物的隔离级别:isolation:指定事务的隔离级别,最常用的取值为:READ_COMMITTED,读以提交。

3)事务回滚:

    (1)noRollbackFor、noRollbackForClassName:对这个异常不进行回滚 通常情况下取默认值即可。

    (2)rollbackFor、rollbackForClassName:对这个异常进行回滚 通常情况下取默认值即可。

4)只读事务:readOnly,只能读取数据,可以帮助数据库引擎优化。如果是只读,应设置:readOnly=true

5)强制回滚时间:timeout:指定强制回滚的时间,单位秒,如该方法执行了5秒,而该属性设置的是2秒,如果到2秒了,该方法还没有执行完,该事务也会对该方法进行强制回滚。

写法如下:

/**
	 * 事物注解
	 * 使用propagation 指定事物的传播行为,即当前事物方法被另一个事物方法调用时如何使用事物,默认取值为REQUIRED,即使用调用方法的事物
	 * REQUIRES_NEW:使用自己的事物,调用的事物方法的事物被挂起。
	 * isolation:指定事务的隔离级别,	最常用的取值为:READ_COMMITTED,读以提交
	 * noRollbackFor:对这个异常不进行回滚 通常情况下取默认值即可。
	 * rollbackFor:对这个异常进行回滚
	 * readOnly:只读事务,只能读取数据,可以帮助数据库引擎优化。如果是只读,应设置:readOnly=true
	 * timeout:指定强制回滚的时间,单位秒,如该方法执行了5秒,而该属性设置的是2秒,如果到2秒了,该方法还没有执行完,该事务也会对该方法进行强制回滚。
	 */
	@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED,
			noRollbackFor={UserException.class},noRollbackForClassName="UserException",
			rollbackFor={UserException.class},rollbackForClassName="UserException",
			readOnly=false,timeout=100)
	public void updatUser(){
		System.out.println("需要用到事务的方法");
	}

而通常情况是,使用事物,不需要设置@Transactional注解的属性,直接把它写在方法上面就可以了。


二、基于xml文件

1、只需要在Spring配置文件中进行一下配置就可以了。

<!-- 配置事物管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" /><!-- ref:引入数据源  -->
	</bean>
	<!-- 配置事务属性,transaction-manager的值必须和上面这个bean的id一样 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 根据方法名指定事务属性 -->
			<tx:method name="updatUser" 
				propagation="REQUIRED" isolation="READ_COMMITTED" 
				no-rollback-for="UserException.class" read-only="false" 
				rollback-for="UserException.class" timeout="5"/><!-- updatUser:对该方法进行事物的属性配置 -->
			<tx:method name="*"/><!-- 代表所有方法,所有的事物取默认配置 -->
			<tx:method name="get*" read-only="true"/><!-- 可以使用通配符的写法,所有使用get开头的方法,它的事务都是只做查询 -->
		</tx:attributes>
	</tx:advice>
	<!-- 配置事务切入点,以及把事务切入点和事务属性关联在一起 -->
	<aop:config>
		<!-- 事务的切入点,execution切入点表达式 -->
		<aop:pointcut expression="execution(* com.qw.service.impl.*.*(..))" id="txPointcut"/>
		<!-- 使用aop,让事务属性和事务切入点关联 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
	</aop:config>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值