spring入门到放弃——spring事务管理

Spring事务提供了两种管理的的方式:编程式事务和声明式事务

简单回顾下事务:

事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败。

事务特性:

原子性:一个事务包含的各个操作单元不可分割

一致性:事务执行前后数据应当保持一致

隔离性:一个事务的执行不应当受到其他事务的干扰

持久性:事务执行完之后,数据就被持久化到磁盘上

Spring事务管理常用的API:

PlatformTransactionmanager:平台事务管理器

平台事务管理器:是一个接口,是spring用于管理事务的真正的对象

      DataSourceTransactionManager:底层使用JDBC管理事务的时候的具体实现类

      HibernateTransactionManager:底层使用Hibernate管理事务时候的具体实现类

TransactionDefinition:事务定义信息

事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读

TransactionStatus:事物的状态

事务状态:用于记录事务管理过程中,事务的状态的对象。

事务管理API的关系:

spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,就会产生各种状态,将这些状态及信息记录到事务状态的对象中。

Spring事务的传播行为

spring事务传播行为主要负责业务层之间互相调用的复杂问题。spring会提供7种事务的传播行为,大概可以分为三类:

  1. 假设有A/B两个方法,各自包含不同的事务操作。
  2. 保证多个操作在同一个事务中 
    1. PROPAGATION_REQUIRED (常用)默认值,B事务所在的方法调用A事务所在的方法,如果A中有事务,则使用A中的事务(包含B事务),如果A没有,创建一个新的事务,将操作包含进来
    2. PROPAGATION_MANDATORY :如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
    3. PROPAGATION_SUPPORTS :支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
  3. 保证多个操作不在同一个事务中
    1. ​​​​​​​PROPAGATION_REQUIRES_NEW (常用)B事务所在的方法调用A事务所在的方法,如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含B自身操作。如果A中没有事务,创建一个新事务,包含B自身操作。
    2. PROPAGATION_NEVER :如果A中有事务,报异常。
    3. PROPAGATION_NOT_SUPPORTED :如果A中有事务,将A的事务挂起。不使用事务管理
  4. 嵌套式事务
    1. PROPAGATION_NESTED (常用):嵌套事务,B事务所在的方法调用A事务所在的方法,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置A执行前,也可以回滚到保存点。

Spring的事务管理

声明式事务管理:

xml方式声明事务管理:




    




    




    
    
    
    




    





    
        
           
    



    
    
   
    
    

注解方式声明事务管理:

  1. 配置事务管理器
  2. 开启事务注解
    1. ​​​​​​​​​​​​​​
  3. 业务层方式上添加注解

​​​​​​​ 

@Transactional(propagation = Propagation.REQUIRED,readOnly = true)

你可能感兴趣的:(spring入门到放弃——spring事务管理)