Spring 事务

Spring 事务

事务基本特性

事务(Transaction)是数据库操作的基本单元,它是一组要么全部执行成功,要么全部不执行的操作集合。事务具有ACID四个特性:

  1. 原子性(Atomicity): 事务是一个不可分割的工作单位;
  2. 一致性(Consistency):事务执行前后,数据库从一个一致性状态变到另一个一致性状态;
  3. 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务;
  4. 持久性(Durability):一旦事务提交,其结果就是永久性的;

Spring事务管理核心接口

Spring并不直接实现事务管理,而是通过PlatformTransactionManager接口提供统一的抽象层,具体的事务实现委托给底层持久化框架(JDBC、Hibernate、JTA等)。

事务管理机制对 Spring 来说是透明的,它并不关心那些,那些是对应各个平台需要关心的,所以 Spring 事务管理的一个优点就是为不同的事务 API 提供一致的编程模型,如 JTA、JDBC、Hibernate、JPA。

各平台的具体实现

事务管理器实现类 适用场景
DataSourceTransactionManager JDBC/MyBatis
HibernateTransactionManager Hibernate
JpaTransactionManager JPA
JtaTransactionManager 分布式事务(JTA)
WebLogicJtaTransactionManager WebLogic特有实现
WebSphereUowTransactionManager WebSphere特有实现

Spring 事务管理主要基于以下几个核心接口

  1. PlatformTransactionManager:事务管理器接口

    public interface PlatformTransactionManager {
         
         
        // 获取事务(根据定义信息创建或加入现有事务)
        TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
            throws TransactionException;
        
        // 提交事务(根据状态决定实际提交或标记为已完成)
        void commit(TransactionStatus status) throws TransactionException;
        
        // 回滚事务(可触发实际回滚或标记为仅回滚)
        void rollback(TransactionStatus status) throws TransactionException;
    }
    
  2. TransactionDefinition:事务定义信息接口

    • 定义事务隔离级别、传播行为、超时时间、是否只读等属性;
  3. TransactionStatus:事务状态接口

    • 提供事务执行状态查询和设置回滚标记等方法;

Spring 框架中 PlatformTransactionManager 与 JdbcTemplate

PlatformTransactionManager 是 Spring 事务管理的核心接口,定义了事务管理的基本操作。

JdbcTemplate 是 Spring 提供的简化 JDBC 操作的工具类,封装了大量 JDBC 操作细节,包括创建和关闭连接、处理结果集、异常处理等。它提供了丰富的方法来执行 SQL 语句。开发者无需再关注底层的数据库连接管理、资源释放等问题,只需专注于 SQL 语句的编写和业务逻辑的处理。

PlatformTransactionManager 侧重于事务管理;JdbcTemplate 侧重于简化数据库操作,提供便捷的方式执行 SQL 语句。

在这里插入图片描述

Spring 支持两种事务管理方式

Spring 提供了两种不同类型的事务管理方式,分别是编程式事务管理和声明式事务管理。

编程式事务管理

编程式事务管理意味着开发者需要在代码中手动管理事务的各个环节,如手动开启事务、提交事务或回滚事务。这种方式给予了开发者极大的灵活性,能够根据具体的业务逻辑精确控制事务的范围和行为,不过代码的维护成本相对较高。

Spring 提供了两种主要的编程式事务管理方式:

  • 使用 TransactionTemplate:这是 Spring 推荐的方式,TransactionTemplate 封装了事务管理的基本操作,简化了编程式事务管理的代码编写,它依赖于 PlatformTransactionManager 来实际管理事务。
  • 直接使用 PlatformTransactionManager:通过直接调用 PlatformTransactionManager 的方法来管理事务,这种方式更为底层,需要开发者手动处理更多的事务管理细节。
声明式事务管理(推荐)

声明式事务管理的核心思想是将事务管理代码从业务代码中分离出来,通过注解或 XML 配置来管理事务,属于无侵入式的事务管理方式。这种方式建立在 AOP(面向切面编程)之上,其本质是在目标方法执行前后进行拦截,在方法开始之前创建或加入一个事务,方法执行完毕后根据执行情况决定是提交还是回滚事务。

Spring 声明式事务管理主要有两种实现方式:基于 XML 配置和基于注解。

XML配置方式

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED"/>
        <tx:method 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值