spring的事务传播特性
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring的事务传播特性内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring的事务传播特性相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring的事务传播特性相关知识
-
Spring事务的传播行为本文主要介绍下Spring事务中的传播行为。事务传播行为介绍Spring中的7个事务传播行为:|事务行为|说明 ||:--|:--||PROPAGATION_REQUIRED | 支持当前事务,假设当前没有事务。就新建一个事务 || PROPAGATION_SUPPORTS |支持当前事务,假设当前没有事务,就以非事务方式运行 || PROPAGATION_MANDATORY| 支持当前事务,假设当前没有事务,就抛出异常|| PROPAGATION_REQUIRES_NEW | 新建事务,假设当前存在事务。把当前事务挂起||PROPAGATION_NOT_SUPPORTED | 以非事务方式运行操作。假设当前存在事务,就把当前事务挂起 || PROPAGATION_NEVER | 以非事务方式运行,假设当前存在事务,则抛出异常 || PROPAGATION_NESTED |如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |举例说明案例代
-
Java高频面试题分享(六)——Spring 支持的数据库事务传播属性和事务隔离级别面试题: 请介绍下 Spring 支持的常用数据库事务传播属性和事务隔离级别? 参考答案: 事务传播属性: 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。(一个方法运行在了一个开启事务的方法中时,当前方法是使用原来的事务还是开启一个新的事务)例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。事务的传播行为可以由传播属性指定,Spring 定义了 7 种传播行为。 传播属性 描述 REQUIRED 默认值,如果有事务正在运行,当前的方
-
长文捋明白 Spring 事务!隔离性?传播性?一网打尽!@[toc] 事务的重要性不言而喻,Spring 对事务也提供了非常丰富的支持,各种支持的属性应有尽有。 然而很多小伙伴知道,这里有两个属性特别绕: 隔离性 传播性 有多绕呢?松哥都一直懒得写文章去总结。不过最近有小伙伴问到这个问题,刚好有空,就抽空总结一下,我不会干巴巴的和大家讲概念,接下来的所有内容,松哥都会通过具体的案例来和大家演示。 好啦,不废话啦,请看大屏幕。 1. 什么是事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么一起成功,要么一起
-
Mybatis:颠覆你心中对事务的理解!1.说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性、四大隔离级别、七大传播特性。四大还好说,问题是七大传播特性是哪儿来的?是Spring在当前线程内,处理多个数据库操作方法事务时所做的一种事务应用策略。事务本身并不存在什么传播特性,不要混淆事务本身和Spring的事务应用策略。(当然,找工作面试时,还是可以巧妙的描述传播特性的)2.一说到事务,人们可能又会想起create、begin、commit、rollback、close、suspend。可实际上,只有commit、rollback是实际存在的,剩下的create、begin、close、suspend都是虚幻的,是业务层或数据库底层应用语意,而非JDBC事务的真实命令。create(事务创建):不存在。begin(事务开始):姑且认为存在于DB的命令行中,比如Mysql的start transaction命令,以及其他数据库中的begin transaction命令。JDBC中不存在。close(事务关闭):不存在。应用程序接口中的c
spring的事务传播特性相关课程
spring的事务传播特性相关教程
- 2.1 事务 ACID 特性 面试官提问: MySQL 中事务的特性是什么?题目解析:ACID 是衡量事务的 4 个维度,分别的定义是:(1)原子性(Atomic,简写 A):原子性要求事务是一个不可分割的执行单位,如果一个事务包含多条 SQL 语句,要么所有的 SQL 都执行成功,要么所有的 SQL 都执行失败,不存在两者之间的中间状态。如果事务中的任意一条 SQL 执行失败,那么已执行成功的也需要回滚。MySQL 中 InnoDB 引擎利用 undo log 实现原子性,undo log 记录了所有已执行的 SQL 记录,如果事务执行失败调用了 rollback 语句,那么使用 undo log 的记录回滚已执行的 SQL。(2)持久性(Durability,简写 D):持久性要求事务一旦提交(commit),对数据库的改变就应该是永久的,其他的操作不会对已提交的事务有影响。InnoDB 引擎中使用 redo log 实现持久性,如果 MySQl 服务器宕机,那么在重启时可以读取 redo log 中的记录恢复数据库。(3)隔离性(Isolation,简写 I):要求一个事务的执行不受到其他并发执行事务的影响。(4)一致性(Consistency,简写 C):事务将数据库从一种状态转换到另一种状态,但是两种状态从数据上是一致的。例如用户下单扣库存让库存减少了一个单位,那么在订单中就会增加一个单位的商品,库存和订单中的商品数量和是不会改变的。
- 4. Spring MVC 的特性 要了解 Spring MVC 的功能特性,就需要从 WEB 应用开发的源头说起。WEB 应用程序的主流开发技术有 3 种:servlet;php;.net。Servlet 是基于 Java 语言的动态 web开发技术,Servlet 指的是 J2EE 中所提出来的企业级服务器开发规范。原生 Servlet 构建的 MVC 开发模式有几个缺点:Servlet 本身采用单例设计模式,生命周期由服务器维护,存在线程安全隐患的问题;理论上讲,每一次不同的 http 请求需要一个 Servlet 组件来响应,当请求类型比较多时,Servlet 就会相应增加,也意味着每一个 Servlet 都可以成为进入服务器的入口。想想你家里对外开了好多扇门,小偷终能找到破绽;随着 Servlet 数量的增加,对服务器的存储空间也会产生压力;使用 Servlet 响应用户请求时,每一个响应逻辑都需要开发者不厌其烦地做些重复的事情,如,解析请求包中的数据、构建响应包、设置页面跳转等等。这些问题,在 Spring MVC 中都得到了很好的解决。使用 Spring MVC 时,就只有一个门可以进入应用程序,这个门叫前端(中央)控制器,所有请求统一经过这个前端控制器分流到具体的内部响应组件;Spring MVC 是 Spring 家族中的一员,有句话叫做“近水楼台先得月”。使用 Spring MVC 时所需要的 WEB 组件也好、其它的逻辑组件也好,都经由 Spring IOC 创建,Spring IOC 容器对组件的生命周期可进行伸缩性设置管理,可根据组件特性保证其线程安全性;Spring MVC 和 Spring 有直属血缘的关系,两者完美结合,使得程序的安全性和稳定性有一定的保证;Spring MVC 利用 Spring 的自动注入功能,能轻松地装配好各组件之间的依赖,开发者只需要关注编写自己的业务逻辑便可,和所有框架理念一样,解放双手,释放大脑。Spring MVC 设计的初衷,就是要做成一款轻量级框架,其内在的原力让我们一起在后续课程中慢慢释放。
- 3.1 特性 事务具有四大特性,即ACID,它们分别是:原子性(Atomicity):每个事务都是一个整体,不可再拆分,事务中的 SQL 操作要么全部执行成功,要么全部失败。一致性(Consistency):事务执行前后数据库的状态必须保持一致。如 A 转账给 B,转账后金额的总数是不变的。隔离性(Isolation):事务与事务之间互不影响,彼此隔离。持久性(Durability):事务一旦提交成功,对数据库的更改就是永久的,即使出现了其它情况,数据改变仍然存在。事务的四大特性是事务最本质的特点,在这四个特性中,原子性是基础,隔离性是手段,一致性是约束条件,而持久性是我们的目的。
- 3. Spring Security 的特性 Spring Security 的核心特性包括:认证和授权、常规攻击防范、与 Servlet 接口集成、与 Spring MVC 集成等。认证和授权的目的是,让系统知道使用者是谁(认证)?是什么样的身份?允许他做什么?禁止他做什么?通常的做法是要求用户输入自己的用户名和密码,来实现登录和鉴权的过程。常规攻击防范在 Spring Security 安全框架中是默认开启的,常见的威胁抵御方式有:防止伪造跨站请求(CSRF)安全响应头(HTTP Response headers)HTTP 通讯安全作为 Spring 大家族的一员,Spring Security 在与 Spring 引用,尤其是与 Spring boot 应用的结合时,显得极为便利。Spring Security 三大功能
- 2. ZAB 的消息广播模式 Zookeeper 为了保证 Zookeeper 集群的数据一致性,使用了 ZAB 协议,在正常工作模式下,ZAB 协议会使用消息广播模式来让 Leader 来对事务性消息进行广播,而且只能有一个 Leader 进行广播。接下来我们就来讲解这个消息广播模式是如何工作的。
- 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)。如何选择,当然是需要根据业务需要进行设定。不同的隔离机制下,并发的事务之间会发生一些什么样的事情?
spring的事务传播特性相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议