`

spring的事务管理笔记

阅读更多

 

Spring事务的介绍

 

首先,事务管理是保证数据操作的事务性 ACID(即原子性、一致性、隔离性、持久性)。

 

       对于使用支持事务管理的数据库时,普通的jdbc的连接没用配置事务也可以保存变更,原因在于连接的属性autocommit设置了true,即自动提交了事务。

 

       而对于某些数据库本身没有对事务的支持,那么事务管理也是一纸空谈没有必要进行配置(有例外),如MySQL的MyISAM没有事务管理的支持。但是如果使用了有自身事务管理的框架如Hibernate的话可以变向地实现事务管理(由于Hibernate的一级缓存,我们在操作update和save等时,它不会向数据库提交数据,而是等我们调用commit或者flush一级缓存的数据时才会提交更改)。

 

       所谓的事务的传播或者说嵌套通俗地说就是,事务方法的互相调用。spring提供了七中传播行为:

  1. PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
  2. PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
  3. PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
  4. PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
  5. PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  6. PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
  7. PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。
        spring在多线程情况下的事务管理遵循如下规则,在同一线程中遵守规定的事务传播方式,在不同的线程中各自独立地管理自己的事务。
 
Spring混合事务的管理
        几个常用的事务管理器
Hibernate Spring JDBC 或 iBatis HibernateTransactionManager
JPA Spring JDBC 或 iBatis JpaTransactionManager
JDO Spring JDBC 或 iBatis JdoTransactionManage

 

       即使用jpa又使用jdbc(JPA+JDBC)称为混合事务,在Spring AOP的事务增强的情况下,混合事务仍然会保持事务的一致,即混合技术但唯一事务。

       但是在使用Hibernate时由于一级缓存的存在必须flush()一级缓存,因为其他框架是感知不到他的一级缓存。

       

       Spring的事务增强是在aop的基础上的,所以aop覆盖不到的方法即不能有Spring的事务管理。

  1. 基于接口的动态代理,除public外其他所有的方法都不能被覆盖包括 public static
  2. 基于cglib的动态代理,static、private、final都不能被覆盖
       但是由于private方法肯定是被public调用才能对外可见,所以private方法依然享有public的事务管理.
 
JDBC连接泄露  
    
       获取的connection的方式很多,例如datasource的获取,通过DataSourceUtils获取,或者使用TransactionAwareDataSourceProxy 获取后面两种获取方法在效果上是一致的所以归并为一类(后文称B方法),而直接获取的是另一类(后文称为A方法)。直接获取的,在事务管理方法中表现出开启两个连接(Spring在事务管理方法中存在一个事务上下文,并同一个数据源绑定唯一一个连接,所有事务上下文传播的方法共享这个链接,加上直接获取的连接即为两个连接同时开启),另一种则只是获取了该方法的事务连接所以表现出只开启了一个连接。直接获取的在方法执行完毕后会泄露一个连接,所以必须显式地关闭连接connection.close()。B方法在存在事务上下文的情况下不必显式地关闭连接,但是没有事务的情况下由于获取方式其实也是直接datasource获取所以也必须显示地关闭连接。
        JDBCTemplate内部也是使用DataSourceUtils获取的连接,但是jdbcTemplate都作显式关闭以防没有上下文的情况。从另个侧面也说明了jdbcTemplate的连接跟事务连接是同一个,所以混合事务管理时才开启一个事务。
       
 

 

分享到:
评论

相关推荐

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    spring hibernate 事务管理学习笔记(一)

    在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...

    Spring.NET学习笔记16——事务管理Demo源码

    在本篇“Spring.NET学习笔记16——事务管理Demo源码”中,我们将深入探讨Spring.NET的事务管理机制及其实际应用。 事务管理是软件开发中的关键部分,它确保数据库操作的一致性和完整性。Spring.NET通过其事务管理...

    Spring Data JPA 笔记

    5. **事务管理**:Spring Data JPA集成Spring的事务管理,可以方便地在方法级别控制事务的开始、提交、回滚,确保数据一致性。 6. ** auditing**:Spring Data JPA还提供了审计功能,通过`@CreationTimestamp`和`@...

    Spring框架学习笔记

    Spring的AOP模块支持声明式事务管理,开发者只需在配置中声明事务规则,无需在业务代码中显式处理事务开始、提交或回滚,降低了事务管理的复杂度。 八、Spring测试 Spring提供了丰富的测试支持,包括单元测试和集成...

    马士兵老师spring框架学习笔记

    7. **Spring AOP事务管理**:Spring提供了声明式和编程式的事务管理,开发者可以通过配置或注解轻松地控制事务的边界,保证数据的一致性。 8. **Spring Boot**:作为Spring的现代化版本,Spring Boot简化了Spring...

    Spring相关的笔记,包含ioc、DI、AOP、Spring事务等等

    这份笔记涵盖了Spring的核心概念和技术,包括IOC(Inverse of Control,控制反转)、DI(Dependency Injection,依赖注入)、AOP(Aspect Oriented Programming,面向切面编程)以及Spring事务管理。以下是对这些...

    spring-note spring 读书笔记

    6. **Spring事务管理**: Spring提供了PlatformTransactionManager接口,支持不同的事务管理策略,如编程式和声明式事务。`spring_transaction.txt`会详细阐述如何配置事务管理,以及@Transactional注解的使用。 7. ...

    spring 事务(6中配置完全降解)

    本篇文章将详细解析Spring中的六种事务配置方法,帮助开发者深入理解并掌握Spring事务的运用。 1. **基于XML的事务配置** Spring支持通过XML配置来管理事务,这是最基础的配置方式。在`spring`的配置文件中,我们...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Java Spring框架学习笔记(内附源码).pdf

    在本次的Java Spring框架学习笔记中,将对Spring框架的核心概念进行详细解析,包括Spring的 IOC(控制反转)、AOP(面向切面编程)、jdbcTemplate、事务管理、Spring5新特性以及与Mybatis的整合。本学习笔记提供了...

    动力节点老杜Spring6,配套笔记PDF文件

    Spring的AOP可以用于处理数据库访问的通用逻辑,比如事务管理。通过切面,我们可以将数据库相关的代码(如事务开始、结束等)抽取出来,使得业务代码更加专注于业务逻辑,符合OCP原则。 6. **Spring的DataSource...

    spring高级源码笔记.pdf

    1. **依赖注入(DI)**:DI是一种设计模式,它允许组件之间的依赖关系在运行时由外部容器(在Spring中是IoC容器)管理,而不是在组件内部硬编码。这样可以降低组件间的耦合度,提高代码的可测试性和可维护性。Spring...

    Spring的学习笔记

    Spring框架是Java开发中的核心组件,它提供了许多高级特性,如依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)以及容器管理的事务等。以下将详细介绍Spring学习笔记中的...

    【狂神说】Spring全面详细笔记.md

    5. **事务处理支持**:Spring提供了一种声明式事务管理模型,简化了事务边界定义。 6. **对其他框架的整合支持**:Spring易于与其他Java EE技术栈集成,如JPA、Hibernate等。 #### Spring框架的组成 Spring框架由...

    Spring学习笔记+学习源码.zip

    6. **事务管理**:Spring提供了声明式和编程式事务管理,使得事务处理更加方便。 7. **Spring Boot**:近年来,Spring Boot简化了Spring应用的初始设置,提供了自动配置和起步依赖,使得开发更加高效。 8. **...

    Spring学习笔记(18)----使用Spring配置文件实现事务管理

    在Spring框架中,事务管理是核心功能之一,它确保了数据的一致性和完整性。这篇"Spring学习笔记(18)-...这篇笔记详细阐述了Spring配置文件实现事务管理的方法,是初学者和进阶者理解Spring事务管理机制的重要参考资料。

    spring aop 学习笔记

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和抽象化的方法来处理系统中的交叉关注点,如日志、事务管理、安全性等。本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际...

    spring课堂笔记

    5. **事务管理**:Spring提供了声明式事务管理,可以在配置文件中声明事务规则,无需在业务代码中显式管理事务,提高了代码的可读性和可维护性。 6. **Spring MVC**:Spring的Web层框架,用于构建RESTful风格的Web...

    尚硅谷spring5视频笔记.zip

    9. **AOP(面向切面编程)**:Spring的AOP模块支持在不修改源代码的情况下进行横切关注点的添加,如日志记录、事务管理等。 10. **Spring Test**:Spring提供了测试框架,包括单元测试和集成测试工具,便于编写和...

Global site tag (gtag.js) - Google Analytics