Spring事务总结

定义

逻辑上的一组操作,要么全做,要么全不做。

四大特性(简称ACID):

  • 原子性(Atomicity)
    事务是不可分割工作单元
  • 一致性(Consistency)
    事务前后数据的完整性必须保持一致
  • 隔离性(Isolation)
    多个用户并发访问时,多个并发事务之间是数据相互隔离的
  • 持久性(Durability)
    一个事务一旦被提交,它对数据库中数据的改变就是永久性的

常用API

3个主要接口

  • PlatformTransactionManager
    事务管理器
  • TransactionDefinition
    事务定义信息
  • TransactionStatus
    事务具体运行状态

事务隔离级别
如果不考虑隔离性,会引发安全问题:
1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
3.幻读(虚读):一个事务读取几行记录后,另一个事务插入一些记录,幻读就发生了。在后来的查询中,第一个事务就会发现有些原来没有的记录。

事务隔离级别

补充:
(1)Mysql 默认采用的 REPEATABLE_READ隔离级别
(2)Oracle 默认采用的 READ_COMMITTED隔离级别

事务传播行为

事务传播行为

补充:
第一类共同点:如果 A 方法中有事务,则调用 B 方法时就用该事务,即:A和B方法在同一个事务中。PROPAGATION_REQUIRED:如果 A 方法中没有事务,则调用 B 方法时就创建一个新的事务,即:A和B方法在同一个事务中。PROPAGATION_SUPPORTS:如果 A 方法中没有事务,则调用 B 方法时就不使用该事务。PROPAGATION_MANDATORY:如果 A 方法中没有事务,则调用 B 方法时就抛出异常。
第二类共同点:A方法和B方法没有在同一个事务里面。PROPAGATION_REQUIRES_NEW:如果 A 方法中有事务,则挂起并新建一个事务给 B 方法。PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事务,则挂起。PROPAGATION_NEVER:如果 A 方法中有事务,则报异常。
第三类:如果 A 方法有的事务执行完,设置一个保存点,如果 B 方法中事务执行失败,可以滚回保存点或初始状态。

重点的三种:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED。

编程式事务

实际中很少使用
通过TransactionTemplate手动管理事务

声明式事务

开发过程中推荐使用
通过使用AOP实现
在配置文件XML中
使用方式

  • 注解
  • AspectJ
  • 基于TransactionProxyFactoryBean方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 很多人喜欢这篇文章,特此同步过来 由浅入深谈论spring事务 前言 这篇其实也要归纳到《常识》系列中,但这重点又...
    码农戏码阅读 10,226评论 2 59
  • Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,...
    EnigmaXXX阅读 3,870评论 0 0
  • 事务有四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作...
    jiangmo阅读 4,982评论 0 7
  • 一、事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供...
    芭蕾武阅读 5,605评论 3 12
  • 1,从本篇文章/音频/视频中我学到的最重要的概念: Two part 1~8.9~13 1.when,where,...
    17数414王俊平阅读 2,720评论 1 1

友情链接更多精彩内容