Spring事物管理介绍

Spring事物管理介绍

我们一般是将事物添加到JavaEE三层结果里面的Service层(业务逻辑层), 可以一定程度降低耦合

  • Spring中Dao层我们要么是使用jdbc, 要么就是使用Mybatis框架, 这两种方式在做数据库中的修改等操作的时候默认都会开启事物, 而对于jdbc开启事物后默认是自动提交事物, 而mybatis如果不使用spring管理, 那么默认开启事物之后是需要我们手动提交的(commit), 但是在spring中继承mybatis之后使用mybatis默认开启事物之后Spring会为将该事物提交
    • 这里其实是因为我们Spring继承mybatis之后是由Spring替我们创建的SqlSession对象, 并且该对象也是由Spring管理的, 所以SqlSession的掌握权在Spring的手中, 所以肯定是由亲爱的Spring框架来替我们最终提交事物(一定要理解, 要理解, 要理解)

Spring其实就相当于是我们请的秘书, 为什么这么说? 我们想: Spring框架的作用是什么? 框架的作用当然是简化开发呀, 那么如何简化开发? 如果是一个人, 如何做到简化? 如何提高你的工作效率? 请一个秘书, 把你认为简单的, 重复的事情交给秘书去做, 这样你是不是就更加轻松了, 所以Spring其实就相当于是我们的一个秘书, 帮我们简化开发, 当然, Spring框架的作用可不仅仅是表面理解的作为秘书

在Spring中进行事物管理操作有两种方式:

  1. 编程式事物管理
    • 编程式事物管理就是直接将事物管理的操作添加到我们要添加事物的代码中, 通过手动开启事物, 回滚, 提交等等
  2. 声明式事物管理
    • 我们一般都是使用声明式事物管理, 因为声明式事物管理使用起来简单, 是依赖AOP实现的, 可以降低耦合

声明式事物管理:

  1. 基于注解方式
  2. 基于XML配置文件方式

我们在实际开发中肯定是基于注解方式的声明式事物管理使用的比较多, 因为基于注解的声明式事物管理使用起来非常高效

Spring进行声明式事物管理底层是使用了AOP原理

Spring事物管理API:

  • Spring中提供了一个SPI接口, 代表事务管理器, 这个接口针对不同的框架提供不同的实现类
    • SPI接口: 服务提供者接口(就是java提供一个接口, 不同服务来实现)
    • Spring中提供的事物管理器接口是 : PlatformTransactionManager接口
      • 针对这个接口:
        1. JDBC提供了一个DataSourceTransactionManager实现类
        2. Mybatis直接沿用JDBC提供的DataSourceTransactionManager实现类

Spring事物角色:

  1. 事务管理员 : 发起事物方, 在Spring中通常指代业务层(Service层)开启事物的方法
  2. 事物协调员 : 加入事物方, 在Spring中通常指代数据访问层(Dao层)方法

使用声明式事物(也就是自动式事物管理), 会在以下情况中失效:

  1. @Transactional注解了一个非public方法
  2. 方法中出现的异常被try-catch捕获了, 认为事物没有出现异常, 事物就会被正常提交
  3. 默认情况下出现编译期异常, 会导致事物失效
    • 因为Spring事物管理默认只对RuntimeException和Error做事物管理, 这个可以通过rollbackFor属性来设置
      • eg: rollbackFor = Exception.Class;
  4. @Transactional事物传播行为设置错误
  5. 数据库引擎不支持事物
    • mysql数据库中只有InnoDB引擎支持事物
  6. 在同一个类中, 在同一个非事物方法中通过this调用了事物方法, 此时是通过非代理对象调用的, 会导致事物失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值