美文网首页
spring事务那些事

spring事务那些事

作者: 鱼儿_皇甫 | 来源:发表于2017-11-28 22:53 被阅读0次

1:基本原理

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:

 1:获取连接 Connection con = DriverManager.getConnection()
 2:开启事务con.setAutoCommit(true/false);
 3:执行CRUD
 4:提交事务/回滚事务 con.commit() / con.rollback();
 5:关闭连接 conn.close();

使用Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 自动完成。那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?解决这个问题,也就可以从整体上理解Spring的事务管理实现原理了。下面简单地介绍下,注解方式为例子

   1:配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional标识。
   2:spring 在启动的时候会去解析生成相关的bean,这时候会查看拥有相关注解的类和方法,并且为这些类和方法生成代理,并根据@Transaction的相关参数进行相关配置注入,这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。

   3:真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。

2: @Transactional注解使用警戒线

不允许在private方法上加@Transactional注解,因为即时在private方法上加上该注解Spring事务也不起作用。

如果要使用aspectj方式来进行事务控制,pom文件中需要引入spring-aspects

当在同一个类中,一个没注解的方法调用一个有@Transactional方法时,事务不生效 。不管运行期异常是在哪个方法中抛出,事务均不生效(亲测,但仅当使用JDKProxy代理),但是当使用AspectJ时,不影响,AspectJ配置如下:

<!-- Spring生成代理有2种方式,默认使用JDKProxy -->
<tx:annotation-driven transaction-manager="txManager"  />

<!--代理模式 基于CGLIB-->
<tx:annotation-driven transaction-manager="txManager"  proxy-target-class="true"/>

<!--如果要使用aspectj方式来进行事务控制,pom文件中需要引入spring-aspects-->
<tx:annotation-driven transaction-manager="txManager"  mode="aspectj"/>

3. 扩展阅读

http://blog.csdn.net/tzdwsy/article/details/50491459
Spring动态代理的坑
Transaction 那些事儿
spring事务管理的一些注意点

4. 使用SpringJunit4Test进行测试时,@Rollback生效问题:

如果需要@Rollback注解生效,则需要在测试类上加上@Transactional注解,否则@Rollback不起作用。
如果没有整合SpringJunit4Test,则@Rollback可正常生效,默认true。
扩展阅读:示例代码

5. Spring事务传播行为详解

6. Spring事务的传播行为和隔离级别

7. 脏读、幻读和不可重复读 + 事务隔离级别

相关文章

  • spring事务那些事

    1:基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功...

  • spring|事务底层原理分析

    spring本身没有事务,spring事务是在数据库事务的基础上进行封装拓展,spring支持声明式事务、编程式事...

  • spring声明式事务

    1.数据库ACID、事务隔离级别 2.spring事务相关的API 3.spring声明式事务 4.spring事...

  • 事务之实际例子(废弃)

    1、前言 平时开发我们经常使用 Spring 事务,而 Spring 默认使用 mysql 的事务。mysql 事...

  • spring事务管理那些事

    一、spring事务介绍 spring事务优点 对不同的api进行统一编程模型,如JTA,JDBC,Hiberna...

  • Spring 事务机制详解

    Spring事务机制主要包括声明式事务和编程式事务 Spring声明式事务时,有一个非常重要的概念就是事务属性。事...

  • Spring事务控制

    一、Spring中事务控制常用API 1.PlatformTransactionManager spring 的事...

  • @Transactional原理

    Spring源码解析之事务篇 在讲解Transactional原理前,先看下spring对事务的管理都有哪些。 事...

  • 关于Spring事务@Transactional的那些事

    Spring中的@Transactional注解是我们在项目中经常使用的,但如果不了解其实现原理,容易在使用过程中...

  • 关于事务的思考

    Spring对于事务的支持 Spring事务接口 Spring事务管理器 Spring并不直接管理事务,而是提供多...

网友评论

      本文标题:spring事务那些事

      本文链接:https://www.haomeiwen.com/subject/shsybxtx.html