前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring事务传播特性

spring事务传播特性

作者头像
袁新栋-jeff.yuan
发布2020-08-26 18:02:30
5360
发布2020-08-26 18:02:30
举报

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • spring事务传播特性
    • 什么是事物呢?
      • Spring的事务的传播特性
        • spring的事务传播属性
          • Spring @Transactional 注解的使用
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档