Spring管理事务

1. 声明式事务管理

  • spring进行事务管理,底层使用AOP原理。
  • Spring提供了相关的API接口用于管理事务,这个接口对于不同的框架有不同的实现类。如果使用jdbc模板 则响应的接口实现类为:DataSourceTransctionManager

Sprin管理事务的方式:

  • 基于注解方式(用的最多)

(1)创建事务管理器,并注入数据源

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="datdaSource" ref="dataSource">
</bean>

(2 )引入名称空间tx

<beans xmlns:tx="http://www.springframework.org/schema/tx"
			xsi:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>

(3) 开启事务注解

<tx:annotation-drivern tansaction-manager="transactionManager"></tx:annotation-drivern>

<!--为了防止代理混乱,JDK代理不支持类注入,只支持接口注入-->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

@Transactional该注解既可以添加到类上面,也可以添加到方法上面。添加到类上面代表对该类的所有方法开启事务,添加到方法上面表示只针对该方法开启事务。

  • 基于XML配置方式

声明式事务管理参数配置

1. propagation(事务的传播)
指的是一个事务去调用另一个事务中的方法,主要有以下传播机制
在这里插入图片描述

@Transactional(propagation = Propagation.Required)

2. isolation(隔离级别)
设置隔离级别是为了解决并发事务问题。主要有以下几种并发事务问题:

  • 脏读:一个事务读到了另一个事务还未提交的数据
  • 不可重复读:一个事务先后读取同一条记录,但两次读取的结果不同
  • 幻读:一个事务按照条件查询时,没有对应的行,但是准备插入时,有发现该行数据已存在

解决措施(设置事务隔离级别)
(1)read uncomitted:脏读,不可重复读,幻读都有可能出现
(2)read comitted:解决了脏读,不可重复读,幻读都有可能出现
(3)repeatable read(mysql默认):解决了脏读,不可重复读,幻读仍然有可能出现
(4)serializable:解决了所有并发事务问题,但是性能较差

@Transactional(isolation = Isaolation.Repeatable_Read)

3. timeout(超时时间)
事务需要在一定时间内提交,在指定时间内没有提交的话会进行回滚
默认值是-1,表示不提交,设置的值都是以秒为单位

@Transactional(timeout = -1)

4. readOnly(只读)
readOnly默认值为false;
设置为true后,只能读取数据库的记录

@Transactional(readOnly = false)

5. rollbackFor(回滚)
设置出现哪些异常事务进行回滚

6.noRollbackFor(不回滚)
设置出现哪些异常不进行事务回滚

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值