spring事务支持

spring事务

spring基于AOP实现了事务管理的功能。Spring启动时会创建相关的bean对象,如果扫描到@Transactional注解的类或方法,会根据@Transactional注解相关的参数进行配置注入,在代理对象中会处理相应的事务,对事务进行管理。

在默认情况下,方法抛出RuntimeException时回滚事务,也可以手动指定事务回滚的异常类型,如:

@Transactional(rollbackFor=Exception.class)

spring事务的三大核心接口:

  • PlatformTransactionManager
  • TransactionDefinifition
  • TransactionStatus

3.1 spring事务传播机制

事务传播类型类别说明
REQUIRED支持当前事务如果当前没有事务,就创建一个事务;如果已经存在事务,就加入这个事务。Spring默认
SUPPORTS支持当前事务支持当前事务,如果当前没有事务,就以非事务的方式执行。
MANDATORY支持当前事务支持当前事务,当前操作必须存在事务,如果不存在,抛出异常。
REQUIRES_NEW不支持当前事务如果当前存在事务,则把当前事务挂起,并重新创建新事务并执行,直到新事务提交或者回滚,才会恢复执行原来的事务。原有事务和新事务相互隔离
NOT_SUPPORTED不支持当前事务以非事务的方式执行,如果当前操作在一个事务中,则把当前事务挂起直到当前操作完成再恢复事务执行
NEVER不支持当前事务以非事务的方式执行,如果当前操作存在事务,抛出异常
NESTED嵌套事务如果当前方法有一个事务正在运行,则这个方法应该运行在一个嵌套事务中,被嵌套的事务可独立于被封装的事务进行提交或回滚;如果当前没有活动事务,则按照REQUIRED机制执行

3.2 Spring事务失效场景

  • 事务方法所在的类没有被Spring IOC容器管理
  • 事务方法没使用public修饰
  • 同一个类中的方法A和B均添加了事务注解,方法A调用方法B,则B的事务会失效
  • 没有配置事务管理器
  • 内部方法的事务传播类型为不支持事务NOT_SUPPORTED
  • 捕获了异常没有抛出来
  • 标注错误的异常类型,默认RuntimeException,如果抛出Exception异常,事务会失效
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值