Spring 事务管理

目录

事务管理

事务的传播机制

Spring 事务抽象

Spring事务管理器配置

XML配置

 Java配置


事务管理

一个数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性说成是 ACID

  • 原子性:事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。

  • 一致性:这表示数据库的引用完整性的一致性,表中唯一的主键等。

  • 隔离性:可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。

  • 持久性:一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

事务的传播机制

Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用 。

  • 编程式事务管理 :这意味着你在编程的帮助下有管理事务。这给了你极大的灵活性,但却很难维护。

  • 声明式事务管理 :这意味着你从业务代码中分离事务管理。你仅仅使用注释或 XML 配置来管理事务。
 spring的传播类型 描述
TransactionDefinition.PROPAGATION_MANDATORY 支持当前事务;如果不存在当前事务,则抛出一个异常

TransactionDefinition.PROPAGATION_NESTED

如果存在当前事务,则在一个嵌套的事务中执行
TransactionDefinition.PROPAGATION_NEVER

不支持当前事务;如果存在当前事务,则抛出一个异常

TransactionDefinition.PROPAGATION_NOT_SUPPORTED

不支持当前事务;而总是执行非事务性

TransactionDefinition.PROPAGATION_REQUIRED

支持当前事务;如果不存在事务,则创建一个新的事务

TransactionDefinition.PROPAGATION_REQUIRES_NEW

创建一个新事务,如果存在一个事务,则把当前事务挂起

TransactionDefinition.PROPAGATION_SUPPORTS

支持当前事务;如果不存在,则执行非事务性

TransactionDefinition.TIMEOUT_DEFAULT

使用默认超时的底层事务系统,或者如果不支持超时则没有。

Spring 事务抽象

Spring 事务抽象的关键是由 org.springframework.transaction.PlatformTransactionManager 接口定义

public interface PlatformTransactionManager {
   TransactionStatus getTransaction(TransactionDefinition definition);
   throws TransactionException;
   void commit(TransactionStatus status) throws TransactionException;
   void rollback(TransactionStatus status) throws TransactionException;
}
  • getTransaction(TransactionDefinition definition)

    根据指定的传播行为,该方法返回当前活动事务或创建一个新的事务。

  • void commit(TransactionStatus status)

    该方法提交给定的事务和关于它的状态。

  • void rollback(TransactionStatus status)

    该方法执行一个给定事务的回滚。

 TransactionDefinition 是在 Spring 中事务支持的核心接口

public interface TransactionDefinition {
   int getPropagationBehavior();
   int getIsolationLevel();
   String getName();
   int getTimeout();
   boolean isReadOnly();
}
方法 描述
int getPropagationBehavior()

该方法返回传播行为。Spring 提供了与 EJB CMT 类似的所有的事务传播选项。

int getIsolationLevel()

该方法返回该事务独立于其他事务的工作的程度。

String getName()

该方法返回该事务的名称。

int getTimeout()

该方法返回以秒为单位的时间间隔,事务必须在该时间间隔内完成。

boolean isReadOnly()

该方法返回该事务是否是只读的。

Spring事务管理器配置

XML配置

XML 中配置事务一共分为三个步骤,以下一一介绍:

1、配置 TransactionManager



      

2、配置事务要处理的方法



    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

注意,一旦配置了方法名称规则之后,service 中的方法一定要按照这里的名称规则来,否则事务配置不会生效

3、配置 AOP



    
    

 Java配置

如果要开启 Java 注解配置,在 XML 配置中添加如下配置:

这行配置,可以代替下面两个配置:





 




        

然后,在需要添加事务的方法上,添加 @Transactional 注解,表示该方法开启事务,当然,这个注解也可以放在类上,表示这个类中的所有方法都开启事务。

你可能感兴趣的:(SSM)