@Transactional 事务注解

一、什么是事务:

	事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作,这些操作作为一个整体一起向系统提交,
要么都执行、要么都不执行。如果任何一个SQL操作失败,那么整个操作就都失败,
所有操作都会回滚到操作前状态,或者是上一个节点。

二、事务的四大特性(ACID)

**原子性(Atomicity**: 
	事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
**一致性(Consistency**: 
	事务执行后,数据库状态与其它业务规则保持一致。
	如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。
**隔离性(Isolation**: 
	隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。
**持久性(Durability**: 
	一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,
	即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制(日志)恢复数据。

三、四大隔离级别

四个等级的事务隔离级别,在相同数据环境下,使用相同的输入,执行相同的工作,根据不同的隔离级别,
可以导致不同的结果,不同事务隔离级别能够解决的数据并发问题的能力是不同的。

**SERIALIZABLE(串行化)**:事务排队执行、非并发、性能最差。
**REPEATABLE READ(可重复读)(MySQL**
**READ COMMITTED(读已提交数据)(Oracle**
**READ UNCOMMITTED(读未提交数据)**:性能最好

四、spring事务传播特性种类

REQUIRED (propagation_required):若当前无事务则创建,有则支持当前事务。这是默认的选择。
SUPPORTS(propagation_supports):若当前无事务则以非事务方式执行,有则支持当前事务。。
REQUIRES_NEW(propagation_requires_new):若当前存在事务则挂起当前事务,无则新建事务。
MANDATORY(propagation_mandatory):若当前没有事务则抛出异常,有则支持当前事务。
NOT_SUPPORTED(propagation_not_support):若当前存在事务则挂起当前事务,无则以非事务方式执行操作。
NEVER(propagation_never):若当前存存在事务则抛出异常,无则以非事务方式执行。
NESTED(propagation_nested):若当前存在事务则在嵌套事务内执行。无则进行与REQUIRED类似的操作。

五、事务的种类

**JDBC事务**:用于服务。
**分布式事务**:用于分布式部署服务、一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,
就会产生分布式事务问题,解决分布式事务可以用:Seate分布式事务解决方案。

六、@Transactional 事务注解

事务不生效的几种 Case
类内部访问:
A 类的B方法没有标注 @Transactional、C方法标注 @Transactional,在 B 里面调用 C;

私有方法:
将 @Transactional 注解标注在非 public 方法上;
异常不匹配:
@Transactional 未设置 rollbackFor 属性,方法返回 Exception 等异常;
多线程:
主线程和子线程的调用,线程抛出异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值