Spring事务总结

定义

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

四大特性(简称ACID):

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

常用API

3个主要接口

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

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

Spring事务总结_第1张图片
事务隔离级别

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

事务传播行为

Spring事务总结_第2张图片
事务传播行为

补充:
第一类共同点:如果 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方式

你可能感兴趣的:(Spring事务总结)