J2EE框架技术 第十章 事务管理技术的应用

发布于:2025-03-31 ⋅ 阅读:(18) ⋅ 点赞:(0)

第一节:Spring事务简介及组成原理

简介:

    Spring事务是Spring框架提供的统一事务管理抽象层,通过声明式或编程式方式实现对数据库事务的控制,保证数据操作的ACID特性(原子性、一致性、隔离性、持久性)。

一、原子性(Atomicity)

  • 定义:事务内的操作要么全部成功,要么全部失败回滚,不可分割。

  • 原理:通过Undo Log(回滚日志)实现,记录事务修改前的数据状态。

示例:

START TRANSACTION;  UPDATE account SET balance = balance - 100 WHERE id = 'A';  -- A扣款  UPDATE account SET balance = balance + 100 WHERE id = 'B';  -- B收款  COMMIT;  -- 成功提交

若第二条SQL执行失败,自动回滚第一条操作。

二、一致性(Consistency)

  • 定义:事务执行后,数据库必须从一个有效状态转换到另一个有效状态,满足预定义规则。

  • 原理:通过数据库约束(主键、外键、唯一性等)和业务逻辑共同保障。

三、隔离性(Isolation)

  • 定义:并发事务之间相互隔离,防止数据冲突。

  • 原理:通过锁机制或MVCC(多版本并发控制)实现。

常见问题:

脏读:读到其他事务未提交的数据

不可重复读:同一事务内两次读取结果不同

幻读:同一查询条件返回不同行数

四、持久性(Durability)

  • 定义:事务提交后,修改永久保存,即使系统故障也不丢失。

  • 原理:通过Redo Log(重做日志)实现,先写日志再修改数据。

Spring事务核心原理:
事务管理器(Transaction Manager)是Spring事务的核心组件,负责事务的创建、提交和回滚。Spring提供了多种事务管理器实现,以满足不同数据源和事务环境的需求。
  • DataSourceTransactionManager:JDBC事务管理

  • JpaTransactionManager:JPA事务管理

  • JtaTransactionManager:分布式事务管理

五、Spring事务的属性配置与策略

5.1 事务属性的配置

Spring事务的属性包括隔离级别、传播行为、只读标志、超时设置等。通过这些属性的组合,我们可以为不同的业务场景配置合适的事务策略。

    5.1.1 隔离级别(Isolation Level)

    隔离级别定义了一个事务可能会受到其他并发事务的哪些影响。Spring提供了与大多数数据库一致的隔离级别,包括:

  • DEFAULT:使用数据库默认的隔离级别。

  • READ_UNCOMMITTED:允许读取未提交的数据。

  • READ_COMMITTED:只允许读取已提交的数据。

  • REPEATABLE_READ:确保多次读取的结果是一致的。

  • SERIALIZABLE:提供严格的事务隔离,以避免幻读。

// 示例:配置事务隔离级别@Transactional(isolation = Isolation.REPEATABLE_READ)public void transactionalMethod() {
    // 执行业务逻辑}

    5.1.2 传播行为(Propagation Behavior)

    传播行为定义了事务的边界。Spring定义了7种传播行为:

  • REQUIRED:支持当前事务,如果没有事务则创建新事务。

  • SUPPORTS:支持当前事务,如果没有事务则以非事务方式执行。

  • MANDATORY:支持当前事务,如果没有事务则抛出异常。

  • REQUIRES_NEW:创建新事务,如果有当前事务,则将当前事务挂起。

  • NOT_SUPPORTED:以非事务方式执行,如果有当前事务,则将当前事务挂起。

  • NEVER:以非事务方式执行,如果存在事务则抛出异常。

  • NESTED:如果当前存在事务,则执行一个嵌套事务,如果当