spring事务传播
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring事务传播内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring事务传播相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring事务传播相关知识
-
Spring事务原理分析在经历的几轮面试中,每一轮都问到了事务相关的内容,让我越发感到事务的重要性。 如: MySQL事务隔离级别?分别解释下他们的含义,默认的事务隔离级别是什么,Oracle的呢? Spring事务传播级别?分别代表什么含义 Spring事务是如何处理的?自己能写出来吗? 那么今天一起看一下Spring的事务处理方式。我自己想手写事务的时候,发现还是太依赖Spring框架提供的功能了,自己写对我来说还是有一定的难度,在此分析一下Spring的实现方式。 整体结构 Spring初始化概览 Spring整个框架包含很
-
【九月打卡】第6天 Java主流框架入门-Spring课程名称:Java工程师2022版课程章节:Spring JDBC与事务管理课程内容:①Spring声明式事务:声明式事务指在不修改源码情况下通过配置形式自动实现事务控制,声明式事务本质就是AOP环绕通知,当目标方法执行成功时,自动提交事务,当目标方法抛出运行时异常时,自动事务回滚课程收获:今天学习了以下知识:声明式事务配置过程 1. 配置TransactionManager事务管理器2. 配置事务通知与事务属性3. 为事务通知绑定PointCut切点Spring事务传播行为 事务传播行为是指多个拥有事务的方法在嵌套调用时的事务控制方式 XML:<tx:method name="..." propagation="REQUIRED"/>注解:@Transactional(propagation=Propagation.REQUIRED)事务传播行为七种类型 事务传播类型 说明PROPAGATION_REQUIRED(默认)
-
【九月打卡】第6天《探秘 MySQL 多版本并发控制原理》课程名称:《探秘 MySQL 多版本并发控制原理》章节:第3章 【登高望远】经验总结 3-1 章节介绍 3-2 事务使用经验课程讲师:普贤课程内容:这两小节是介绍整个章节内容以及事务使用经验。主要讲了spring事务传播机制和数据库事务隔离级别的关系。PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的默认设置。PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER:以非事务方式执
-
【九月打卡】第7天学习Mysql多版本并发控制原理第一模块:课程名称:Mysql多版本并发控制原理章节:第三章【登高望远】经验总结讲师姓名:普贤第二模块:第三章主要讲解了一些事务使用经验总结,索引实战相关内容(面试相关),MySql面试知识点汇总第三模块:章节3-1,3-2本章节讲解了第三章主要的教学目标,然后如下更加细致的内容Spring事务传播机制(7种)propagation_required 支持当前事务,如果没有当前事务,那么就新建一个事务propagation_supports 支持当前事务,如果没有当前事务,就以非事务的方式继续执行propagation_mandatory 支持当前事务,如果当前没有事务,那么就直接抛出异常,也就是说必须有事务业务才能继续执行propagation_requires_new 新建事务,如果当前存在事务,当前事务挂起propagation_not_supported 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起propagation_never 以非事务方式执行,如果当前存在事务,则抛出异常prop
spring事务传播相关课程
spring事务传播相关教程
- 9.1 事务管理器 transactionManager 在 xml 文件中对应 <transactionManager type="JDBC"/>,其中 type 属性对应了事务管理器的两种类型,分别是JDBC和MANAGED。JDBC :直接使用了 JDBC 的提交和回滚机制。MANAGED:让容器来管理事务的整个生命周期,例如 spring 容器。提示: 如果你使用 spring 作为容器,那么 transactionManager 会被自动配置且可用。
- 2. ZAB 的消息广播模式 Zookeeper 为了保证 Zookeeper 集群的数据一致性,使用了 ZAB 协议,在正常工作模式下,ZAB 协议会使用消息广播模式来让 Leader 来对事务性消息进行广播,而且只能有一个 Leader 进行广播。接下来我们就来讲解这个消息广播模式是如何工作的。
- 5.1 引入分布式事务依赖 在 pom.xml 引入 Atomikos 事务管理器相关的依赖项, Atomikos 是一个开源的事务管理器,支持分布式事务。实例: <!--分布式事务 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> </dependency>
- 3.2 无序广播 理解了有序广播之后,无序广播就很容易理解了。无需广播就是没有任何优先级之分,所有广播都是异步同时发送,此时 Receiver 的接收时序也是完全随机的。正因为异步且无需保证时序,所以无需广播更高效,但是不能在各个 Receiver 之间传递数据。
- 2. 事务 什么是事务?一讲到事务,就有一个典型的案例:转账。转账业务涉及到 2 个账号的变更。例如 A 现在要把自己账户上仅有的 100 元大钞转给自己的好朋友 B。转账过程中至少要涉及到两条更新语句:A 账面上的钱减少,使用更新语句实现:Update 账号表 set 我的钱=我的钱-100 where 账号拥有人=AB 账户上的钱增多,使用更新语句实现:Update 账号表 set 我的钱=我的钱+100 where 账号拥有人=B如果、万一这两条更新语句中有一条没有执行成功,会发生什么情况了?发生在 A 身上的更新语句没有成功,B 的更新语句成功了。也就是说 A 账面上的钱没有减少,B 账面上的钱却增加了。天呀!这是何等好事,关键是这钱是从哪里来的,左想右想,看来只能是银行里来的,但是,你觉得银行会做这种傻事吗?不会!那银行又是如何保证不让这种事情发生了。发生在 B 身上的更新语句没有成功,A 的更新语句成功了。也就是说 A 的钱减少了,但是 B 没有增加。傻眼了吧,莫名其妙的钱就不见了。钱去哪儿了?你会让这种事情发生吗?也不会,你会投诉银行的。当然,如果这 2 条 SQL 语句执行成功或者失败,则不会发生任何损失,可见,咱们必须控制这两条 SQL 语句要么都成功,要么都失败。对!这就是事务。所谓事务,就是把一个业务逻辑当成一个逻辑整体单元,其中的执行代码要么一起成功,但凡执行过程中出现了某些错误,就恢复到最原始的状态。转账就是一个业务逻辑,整个业务逻辑中至少包括 2 条 SQL 语句,这 2 条 SQL 语句互为依靠,彼此脱单对业务逻辑没有任何意义。所以,必须当成一个整体看待。一个事务单元有 4 个特性,也就是事务的 ACID 特性:原子性(atomicity): 表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败;一致性(consistency): 表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前的状态;如前面转账案例,转账前 A 和 B 加起来有多少钱,无论转账是否成功,最后 A 和 B 加起来的钱应该和前面相等;隔离性(isolation): 事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据;持久性(durability): 事务完成之后,它对于系统的影响是永久性的。事务结束后,就没有什么后悔药了。4 个特性中除了隔离性都比较好理解。所以,剩下的篇幅中,咱们好好聊一聊隔离性。要讲透隔离性,肯定就离不开并发概念。什么是并发?并发是计算机中的一个概念,但是在现实生活中还是能找到一个能类比的例子。火车上,2个人同时去一间洗手间,这个过程可以称其为并发。换成计算机概念就是说两段逻辑代码同时使用同一个资源。当然,这里只是从宏观上理解并发。老公和老婆共用一个账号,大家需要钱时都从这个账号上取,可假设老公和老婆就是两个事务,这 2 个事务如果同时取钱时,就必须隔离,否则就会出现麻烦。2 个事务同时进入这个账号,一查看,很高兴,账面上有钱,于是都想取出这 1000 块钱。银行肯定只能让一个事务成功,要不然银行就亏大了。这便是事务的隔离机制,当一个事务对一个资源进行操作时,必须隔离另一个事务对其进行相关操作。但是,如果隔离的太严格了,事务之间就如同排队,需要一个一个来,将会降低系统的响应时间,使用者会认为,切!这系统设计的够糟糕的,睡了一觉,还没有响应。如果隔离的太宽松了,受事务之间的影响,会发生数据的异常。所以在 JDBC 中一般会提供多种隔离机制,让开发者根据需要进行选择。事务隔离级别从低到高:读取未提交(Read Uncommitted);读取已提交 (Read Committed);可重复读(Repeatable Read);序列化(serializable)。如何选择,当然是需要根据业务需要进行设定。不同的隔离机制下,并发的事务之间会发生一些什么样的事情?
- 2.1 消息广播的数据同步 在我们使用 Zookeeper 客户端向 Zookeeper 集群的某一个 Follower 发送事务请求时,也就是对 Znode 节点的增删改操作时,这个Follower 节点并不会自己去处理这个事务请求,而是会把这个请求转发给 Leader 节点,让 Leader 节点来处理事务请求。Leader 节点接收到 Follower 转发过来的请求,会生成与事务请求相对应的 Proposal 事务提案,并为这个 Proposal 事务提案分配全局唯一的单调递增的事务ID,也就是 ZXID,然后把 Proposal 事务提案发送到集群中所有的 Follower 节点。如果 Leader 节点接收到了多个 Follower 节点转发的请求,Leader 节点会根据 Proposal 事务提案的 ZXID 的先后顺序来对 Follower 节点进行广播。Follower 节点接收到 Proposal 事务提案后,会把接收到的 Proposal 事务提案以事务日志的方式写入本地磁盘中,成功后会向 Leader 节点返回 Ack 确认信息,确定自己能够执行该事务。在这一步骤中, Follower 向 Leader 发送反馈,确认 Follower 节点能够执行该事务,但不会去提交该事务请求。Leader 节点接收到半数以上的 Follower 节点返回的 Ack 确认信息后,就会向所有的 Follower 节点广播 Commit 消息,通知 Follower 节点提交事务请求,同时 Leader 节点自己也会提交该事务请求。接收到 Commit 消息的 Follower 节点就会开始进行事务提交。当 Follower 节点完成事务的提交后,Leader 节点就会把该 Follower 节点加入可用的 Follower 列表中,该Follower 节点就可以对外提供服务了。除了 Follow 节点需要进行数据同步外,Zookeeper 集群还有一种叫做 Observer 的节点会进行数据同步,那么我们接下来简单介绍一下 Observer 节点。
spring事务传播相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议