前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >事务管理的方式&事务隔离级别&事务的传播行为

事务管理的方式&事务隔离级别&事务的传播行为

作者头像
名字是乱打的
发布2022-05-13 12:49:59
5110
发布2022-05-13 12:49:59
举报
文章被收录于专栏:软件工程

一 Spring 管理事务的方式有几种

    1. 编程式事务,在代码中硬编码。(不推荐使用)
    1. 声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种:

    1. 基于XML的声明式事务
    1. 基于注解的声明式事务

二 2 Spring 事务中的隔离级别有哪几种?

TransactionDefinition 接口中定义了五个表示隔离级别的常量:也是对应着数据库的四个事务隔离级别

  • TransactionDefinition.ISOLATION_DEFAULT: 使用后端数据库默认的隔离级别,Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • TransactionDefinition.ISOLATION_READ_COMMITTED: 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • TransactionDefinition.ISOLATION_REPEATABLE_READ: 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

三 Spring 支持哪些事务传播行为,分别是啥样的?

关于最后一个嵌套事务这里以A事务方法调B事务举个例子

  • A开启一个事务
  • 执行方法A里的一些代码,doSomethingPre()
  • 调用B方法,设置一个回滚点,savepointe
  • 执行方法B里的一些代码
  • 如果方法B里抛出了异常,此时进行回滚,回滚到之前的savepoint,仅仅回滚B的代码
  • 继续执行方法A里的一些代码,doSomethingPost()
  • 提交或者回滚事务(比如A成功会提交AB的事务,如果A失败会把A和B的事务都回滚了)
四. 4 @Transactional(rollbackFor = Exception.class)注解

这个要先说一说Exception了,Exception分为运行时异常RuntimeException和非运行时异常。事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。

@Transactional可以标明我们的类或者方法是不是要用事务,

@Transactional注解中如果不配置rollbackFor属性,那么事务只会在遇到RuntimeException(比如NullPointerException:空指针异常)的时候才会回滚

加上rollbackFor=Exception.class,可以让事务在遇到非运行时异常时(比如NumberFormatException:字符串转换为数字异常)也回滚。

关于两种异常种类的常见异常可以看

另外关于JAVA非受检异常和受检异常的区别

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 Spring 管理事务的方式有几种
  • 二 2 Spring 事务中的隔离级别有哪几种?
  • 三 Spring 支持哪些事务传播行为,分别是啥样的?
    • 四. 4 @Transactional(rollbackFor = Exception.class)注解
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档