Spring事务

事务是通过要么都执行要么都不执行的特性来实现原子性。

在Spring中主要通过@Transactional注解来使用事务,实际实现是通过AOP实现以及需要数据库的支持。

在spring中事务主要通过以下3个进行管理

  • PlatformTransactionManager:平台事务管理器
  • TransactionDefinition:事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
  • TransactionStatus:事务运行状态,比如是否新事务、是否可以回滚

Spring为所有平台都提供了接口PlatformTransactionManager,该接口定义了getTransaction通过事务定义信息生成事务获取事务状态,commit提交事务,rollback回滚事务。

事务属性有隔离级别、传播行为、回滚规则、是否只读、事务超时5个方面的事务属性。

隔离级别

与数据库隔离级别一致,这里便不多叙述了。

传播行为

事务传播行为是为了解决业务层方法之间相互调用事务问题。

比如说如果我们在a方法中调用了b方法,那么如果b发生了异常需要回滚,怎么让a也跟着回滚呢?

在有了传播行为之后,我们只需要设置@Tranctional(propagation=propagation.PROPAGATION_REQUIRED).

当然还有其他事务传播如下

  • requires_new: 开启独立事务
  • nested: 开启嵌套事务
  • mandatory: 有事务加入,没有则回滚
事务超时

就是设置一个事务所允许执行的最长时间,若超出时间还没有完成,则自动回滚。

事务只读

对于单条数据,没有必要启用事务支持,可是对于多条查询语句,比如统计数量之类的,可能存在前后的sql查询之间发生了改变。

事务回滚

规定哪些异常导致事务回滚(默认运行期异常,Error导致回滚,检查型不回滚)

Ref

  1. https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/framework/spring/Spring%E4%BA%8B%E5%8A%A1%E6%80%BB%E7%BB%93.md
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值