Spring事务原理

事务基本原理

1、获取连接 Connection con = DriverManager.getConnection()
2、开启事务 con.setAutoCommit(true/false);

3、执行 CRUD
4、提交事务/回滚事务 con.commit() / con.rollback();
5、关闭连接 conn.close();

说明:Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 自 动完成。

通过@Transactional 标识,生成代理,处理事务(开启正常提交事务,异常回滚事务) ),真正的数据库事务是

通过 binlog 或者 redo log 实现的。

事务传播属性

事务嵌套情况下起作用

​ PROPAGATION_REQUIRED :

支持当前事务,如果当前没有事务,就新建 一个事务。这是最常见的选择,也是 Spring 默认的事务的传播。

​ PROPAGATION_REQUIRES_NEW :新建事务,如果当前存在事务,把当前事务 挂起。新建的事务将和被挂起的事务没有任 何关系,是两个独立的事务,外层事务失败 回滚之后,不能回滚内层事务执行的结果, 内层事务失败抛出异常,外层事务捕获,也 可以不处理回滚操作

ROPAGATION_SUPPORTS :支持当前事务,如果当前没有事务,就以非 事务方式执行。

PROPAGATION_NOT_SUPPORTED :以非事务方式执行操作,如果当前存在事 务,就把当前事务挂起。

###事务特性

ACID 特性。

原子性(Automicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要 么都做,要么都不做。

一致性(Consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。 一致性与原子性是密切相关的。

隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及 使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(Durability):持久性也称永久性(Permanence),指一个事务一旦提交,它 对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何 影响。

####JDBC事务隔离级别

Read-Uncommitted0导致脏读
Read-Committed1避免脏读,允许不可重复读和幻读
Repeatable-Read2避免脏读,不可重复读,允许幻读
Serializable3串行化读,事务只能一个一个执行,避免了 脏读、不可重复读、幻读。执行效率慢,使 用时慎重

说明:spring隔离级别相对于以上 多一个 default级别

​ isolation_default: 这是个 PlatfromTransactionManager 默 认的隔离级别,使用数据库默认的事务隔离 级别。另外四个与 JDBC 的隔离级别相对 应。

Spring事务API架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UnSheFm0-1587293081912)(/Users/rachel/Library/Application Support/typora-user-images/image-20200415101221089.png)]

###分布式事务

数据一致性理解:

强一致性:当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更 新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。 根据 CAP 理论,这种实现需要牺牲可用性。

弱一致性:系统并不保证后续进程或者线程的访问都会返回最新的更新过的值。系统在 数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可 以读到。

最终一致性:弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回 上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟, 系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。

​ 分布式事务一致性问题?

​ 基于CAP理论,抛弃强一致性,为了可用性和分区容错性,忍痛放弃强一致支 持,转而追求最终一致性。

为了保障系统的可用性,互联网系统大多将强一致性需求转换成最终一致性的需求,并 通过系统执行幂等性的保证,保证数据的最终一致性。

分布式事务服务(Distributed Transaction Service,DTS)是一个分布式事务框架,用 来保障在大规模分布式环境下事务的最终一致性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值