`

【MySQL】Spring中的事务管理

阅读更多

Spring不直接管理事务,它提供了事务管理器,但是具体相关管理职责由 Hibernate、MyBatis 等持久层框架实现。由这些持久层框架实现与数据库服务的通信。

 

@Transactional

使用Spring提供的事务框最普遍的方式是 在事务方法上添加标记 @Transactional,并设置相关属性。如:

@Transactional(propagation=Propagation.REQUIRED,
    isolation=Isolation.REPEATABLE_READ)
public void runInTransaction() {
  ...
}
public @interface Transactional {
  // 事务的 名称
  String value default "";
  
  // 事务的 传播方式
  Propagation propagation() default Propagation.REQUIRED;

  // 事务的 隔离级别
  Isolation isolation() default Isolation.DEFAULT;

  // 事务的 超时时长
  int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;

  // 事务是否 只读
  boolean readOnly() default false;

  // 遇到这些异常时 触发事务回滚。默认遇到 RuntimeException 和 Error 时回滚;受检异常不回滚。
  Class<? extends Throwable>[] rollbackFor() default();

  // 其它回滚机制设置
  String[] rollbackForClassName() default {};

  Class<? extends Throwable>[] noRollbackFor() default {};

  String[] noRollbackForClassName() default {};
}

 

PlatformTransactionManager

PlatformTransactionManager 是 Spring 事务管理架构中的中央接口。

实际使用时一般通过注解的形式(AOP)使用,而不是直接调用这些方法。

 

public interface PlatformTransactionManager {
  // 获取事务的状态
  TransactionStatus getTransaction(TransactionDefinition definition);

  // 提交事务
  void commit(TransactionStatus status);

  // 回滚事务
  void rollback(TransactionStatus status)
}

 

TransactionDefinition

TransactionDefinition 定义了事务的一些属性,包括“传播行为”、“隔离级别”、“是否只读”、“超时时长”、“名称”。
这些属性会在 Spring事务管理机制 中被使用。

传播行为 用于处理事务嵌套的情况;
隔离级别 用于处理事务并发的情况;
事务 超时时长 表示允许事务执行的最长时间。如果事务超时未完成,就会自动回滚;
事务 只读 表示对事务性资源只读。如果确定事务只包含读操作,可将其标记为只读,以提高性能。

public interface TransactionDefinition {
  // 获取事务的 传播行为
  int getPropagationBehavior();

  // 获取事务的 隔离级别
  int getIsolationLevel();

  // 获取事务的 超时时长
  int getTimeout();

  // 判断事务 是否只读
  boolean isReadOnly();

  // 获取事务 名称
  String getName();
}

 

TransactionStatus

TransactionStatus 提供了一组方法用于获取事务的状态。

public interface TransactionStatus {
  // 判断事务 是否为新建的事务
  boolean isNewTransaction();

  // 判断事务 是否有保存点
  boolean hasSavepoint();

  // 将事务设置为 只回滚
  void setRollbackOnly();

  // 判断事务 是否为只回滚
  boolean isRollbackOnly();

  // 判断事务 是否已完成
  boolean isCompleted();
}

 

Spring 支持的事务隔离级别

对事务的支持是由数据库提供的。Spring 只是个框架,它方便我们使用数据库提供的事务特性。
SQL-1992 中定义的4个隔离级别在Spring中都有对应的标识。
此外Spring还提供了一个隔离级别标识,Isolation_Default,用于使用数据库默认的隔离级别。

 

Spring 的事务传播行为控制

Spring 的事务传播行为控制机制用于支持业务层中的事务嵌套场景。
当一个事务方法被另一个事务方法调用时,这个被调用的事务方法可能需要在当前事务中运行,也有可能需要新开一个事务运行。
Spring定义了 7种 事务传播行为:

 

支持当前事务的传播行为

  • Propagation_Required:如果当前存在事务,则加入当前事务;否则创建一个新事务。(默认
  • Propagation_Supports:如果当前存在事务,则加入当前事务;否则以非事务的方式运行。
  • Propagation_Mandatory:如果当前存在事务,则加入当前事务;否则抛出异常

 

不支持当前事务的传播行为

  • Propagation_Requires_New:创建一个新事务。如果当前已经有事务,则挂起当前事务
  • Propagation_Not_Supported:以非事务方式运行。如果当前已经有事务,则挂起当前事务
  • Propagation_Never:以非事务方式运行。如果当前已经有事务,则抛出异常

 

其它传播行为

    • Propagation_Nested:如果当前存在事务,则创建一个新事务作为嵌套事务运行;否则创建一个新事务

前 6种 传播行为借鉴自EJB,概念相同。PROPAGATION_NESTED 是 Spring 特有的。

内嵌事务基于JDBC的 SavePoint 实现。

只有外部事务提交,内嵌事务才能提交

外部事务回滚,会引起内嵌事务回滚

 

 

分享到:
评论

相关推荐

    实验 spring 声明事务

    接着,使用`&lt;tx:advice&gt;`和`&lt;tx:attributes&gt;`定义事务策略,例如,将所有以`insert*`、`update*`和`delete*`开头的方法设置为`REQUIRED`传播属性,意味着这些方法必须在事务中执行。最后,使用`&lt;aop:config&gt;`配置...

    jdbc+spring+mysql事务理解和分析

    1. **原子性(Atomicity)**:这是事务的基本特性,表示事务中的所有操作要么全部成功,要么全部回滚。如果在事务执行过程中发生错误,数据库会撤销所有已完成的操作,使得数据库状态回到事务开始前的状态。在示例代码...

    spring hibernate mysql 事务实例

    在IT行业中,数据库事务是确保数据一致性的重要机制,特别是在分布式系统和多层架构中,如Spring、Hibernate和MySQL的组合。本实例将深入探讨如何在这样的环境中实现事务管理。 Spring框架以其强大的依赖注入和AOP...

    Spring+Mybatis+MySql+Maven 简单的事务管理案例.rar

    同时,Mybatis的Mapper接口会被Spring代理,以确保其操作在同一个事务中进行。 总结来说,这个案例将展示如何在Spring中配置Mybatis和MySQL,以便在处理数据库操作时使用Spring的声明式事务管理。Maven将用于构建和...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    例如,`PROPAGATION_REQUIRED` 表示如果当前存在事务,则加入到当前事务中;如果不存在,则新建一个事务。其他的传播行为还有 `PROPAGATION_SUPPORTS`、`PROPAGATION_MANDATORY`、`PROPAGATION_REQUIRES_NEW`、`...

    Maven + spring + mybatis + mysql + 事务管理

    在企业级Java开发中,"Maven + Spring + MyBatis + MySQL + 事务管理"是一个常见的技术栈组合,它们各自扮演着不同的角色,构建出高效、稳定的后端系统。 **Maven** 是一个项目管理和综合工具,它帮助开发者管理...

    Spring分布式事务实现

    其中,Spring的分布式事务管理是其核心特性之一,它允许开发者在分布式系统环境中处理复杂的事务逻辑。本篇将深入探讨Spring如何实现分布式事务,以及涉及到的相关技术。 首先,分布式事务是指在多个数据库或者服务...

    JavaEE的Spring JDBC与事务管理 实验

    3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二、 实验内容 1、在MySQL中创建以下三张表,其中account为账户表,book为书籍信息...

    JAVA(Spring)事务管理.doc

    这个接口是Spring事务管理的高层次抽象,它负责真正地管理事务,包括提交、回滚以及其他的事务控制。Spring为不同的持久层技术(如JDBC、Hibernate、JPA等)提供了不同的`PlatformTransactionManager`实现,以便于与...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    MySQL是广泛使用的开源关系型数据库管理系统,它支持事务处理,是分布式事务中的关键组件。在这个项目中,MySQL作为数据存储,与JOTM和Spring配合,共同确保分布式事务的正确执行。 项目文件“AjtaAbatisTest”可能...

    Spring 事务简单完整例子

    本文将深入探讨在Spring框架中如何管理事务,以“Spring 事务简单完整例子”为出发点,结合标签“spring,事务,jdbc事务”,我们将详细解释Spring事务管理的原理和实践。 首先,Spring提供了两种事务管理方式:编程...

    Spring事务小demo

    首先,Spring事务管理是Spring框架的核心特性之一,它允许我们以声明式或编程式的方式管理事务。声明式事务管理通过配置元数据(如XML或注解)来定义事务边界,而编程式事务管理则是在代码中显式调用...

    spring mvc+hibernate实现事务管理(配置文件版)

    在本项目中,我们需要配置Spring的事务管理器,一般有两种方式:编程式事务管理和声明式事务管理。声明式事务管理更为常见,它通过在服务层的方法上添加@Transactional注解,由Spring自动进行事务的开启、提交或回滚...

    spring hibernate,spring jdbc事务管理

    两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml...这两个项目下来,关于spring事务这一块基本上明了,绝对对得起这个分数

    Spring事务优缺点及使用详解.docx

    Spring事务管理提供了统一的事务处理模型,使得开发者无需关注具体数据库访问技术的事务细节,简化了事务控制代码,提高了代码的可读性和可维护性。无论是使用注解还是AOP配置,都能有效地管理和协调事务,确保应用...

    企业日常事务管理系统MySQL.zip_MYSQL_javaweb_事务管理系统

    本文将深入探讨MySQL在数据库管理中的作用,JavaWeb的基本概念以及如何构建一个事务管理系统。 首先,MySQL是一款开源、免费的关系型数据库管理系统,它具有高性能、高可靠性和易于使用的特性。在企业日常事务管理...

    spring3.0+hibernate3.3+mysql8.0

    4. **事务管理**:在Spring中配置事务管理器,如`HibernateTransactionManager`,并使用`@Transactional`注解来声明方法级别的事务边界。 5. **DAO层**:创建数据访问对象(DAO),利用Spring的JdbcTemplate或...

    spring_mysql_jdbc

    Spring框架是Java领域中广泛使用的应用框架,它提供了一整套用于简化数据库操作的工具和API,而MySQL则是一种流行的开源关系型数据库管理系统。 描述中提到的“mysql的驱动”,是指MySQL的JDBC驱动程序,这是Java...

    Spring事务管理配置文件问题排查

    当出现像描述中那样的问题——SQL语句执行出错但事务未回滚时,我们需要深入理解Spring事务管理的配置和机制。以下是一些关键知识点: 1. **Spring事务管理类型**: - **编程式事务管理**:通过`...

    spring mvc+spring+hibernate+bootstrap+mysql 考勤及薪酬管理系统

    《基于Spring MVC+Spring+Hibernate+Bootstrap+MySQL的考勤及薪酬管理系统详解》 在现代企业信息化管理中,考勤和薪酬管理是至关重要的部分,它们直接影响到员工的工作积极性和公司的运营效率。本文将深入探讨一个...

Global site tag (gtag.js) - Google Analytics