专栏首页用户4352451的专栏spring事务传播特性

spring事务传播特性

spring事务传播特性

什么是事物呢?

  1. 事务是一系列的动作(逻辑update,insert,delte…),它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,可以想一下0和1 ,你把0变成1的过程就比作事务,这个过程中如果遇到问题就会失败就会变为原有状态0,而不会出现0.5等值,如果成功就是1,我们不难发现这个事务需要正确的执行有几个特性,那就是ACID;
  2. 事物的特性
  • Atomicity(原子性) :整个过程是完整的不会出现在一个过程中一部分成功一部分失败的情况
  • consistency(一致性) :满足业务规则的一致性状态,如A给B转账A的钱减少了而B的钱没有增加(这就是不一致的情况)
  • Isolation(隔离性):在进行并发操作的时候,事务之间是拥有各自的数据空间,各自的操作不会对其受到影响,但是这个也得根据隔离级别来判定(这就是事务的隔离级别特性),虽然隔离级别越高对数据的安全性越高,我们可以想一下这个数据完全被隔离起来,那就是这个数据完全不让别人操作,那不就是并发的性能就很低了(因为只允许一个地方来进行操作(锁))。
  • durability(持久性)当这个事务完成操作的时候,这里保存的事务就会被持久化到存储器中(MySQL,H2,Oralce等) 也许你看到这个会有一个疑问,那就是那数据库在进行存储的时候会不会出现失败或者不遵循ACID呢? 那我们再想一下,那岂不就是数据库的几个特性了(想一下MYSQL的数据库的特性)

Spring的事务的传播特性

通过上面对事物的说明,有编程经验的人应该都很清楚为什么需要失误了吧?那就是为了防止出现业务逻辑上的出错,如算错账转错钱等。

  1. 在spring中有两种事务管理:
  • 编程式事务管理:
  1. 将事务管理代码嵌入到业务逻辑中来控制事务的提交和事务的回滚,必须在每个事物操作中包含额外的事务管理代码如下:
  • 声明式事务管理
  1. 配置:
  • 配置DataSource
  • 配置事务管理器
  • 事务的传播特性
  • 那些类那些方法使用事务 Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问 时,DataSource实际为SessionFactory,TransactionManager的实现为 HibernateTransactionManager。

根据代理机制的不同,Spring事务的配置又有几种不同的方式:

第一种方式:每个Bean都有一个代理

第二种方式:所有Bean共享一个代理基类

第三种方式:使用拦截器

第四种方式:使用tx标签配置的拦截器

第五种方式:全注解

注意点:

1、Spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit 或者rollback,取决于是否抛出runtime异常。

spring的事务传播属性

事务传播行为类型

说明

REQUIRED

如果有事务在运行,当前的方法就在这个事务内运行;否则,就启动一个新的事务,并在自己的事务内运行;

REQUIRES_NEW

当前的方法必须启动新事务,并在它自己的事务内运行;如果有事务正在运行,应该将它挂起。

MANDATORY

当前的方法必须运行在事务内部,如果没有正在运行的事务,将抛出异常。

SUPPORTS

如果有事务在运行,当前的方法就在这个事务内运行;否则它可以不运行在事务中。

NOT_SUPPORTED

当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。

NEVER

当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常。

NESTED

如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行。否则,就启动一个新的事务,并在它自己的事务内运行。

Spring @Transactional 注解的使用

https://www.jianshu.com/p/befc2d73e487

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL innoDB的事务隔离

    疑问: 那读提交和可重复读有什么区别吗? 是的,我也有这个疑问,读提交和可重复读不都是在提交后对其他事务可见。确实是这样 但是读提交在另一个事务提交后再去读取...

    居士
  • 中流砥柱java的动态代理

    在我们学习Spring框架的时候我们是否思考过,Spring是如何实现bean实列注入到IOC容器中呢?我们如何去

    居士
  • 关于使用MySQL innoDB引擎中事务和锁的信息记录表

    字段名 说明 id 一个标识 user 显示当前用户,如果不是root,这 个命令就只显示你权限范围内的sql语句。 host 显示这个...

    居士
  • Spring技术知识点总结之六——Spring 事务传播等级

    Spring 事务传播有七个等级,假设有 methodA 调用 methodB,根据事务传播等级的设置,methodA 与 methodB 有如下效果:

    剑影啸清寒
  • Mysql - 数据库的隔离级别、传播行为

    夹胡碰
  • 事务相关知识点

    不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

    java乐园
  • [spring事务]一篇浅文让你摆脱事务困扰

    原子性(Atomicity):事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生

    星尘的一个朋友
  • Java项目实践,数据访问层事务控制方法总结,保障数据安全

    事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问,比如,银行转帐业务,账户A要将自己账户上的1000元转到B账户下面,A账户余额首先要减去1...

    用户1289394
  • 关系型数据库的ACID(原子性、一致性、隔离性与持久性)

    Coxhuang
  • spring注解事务

     spring注解事务 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.sprin...

    yawn

扫码关注云+社区

领取腾讯云代金券