SSM(B站黑马)学习笔记
01-1-Spring概述
01-2-Spring IOC
01-3-Spring AOP
01-4-Spring 事务
02-SpringMVC
03-SSM整合
04-Maven高级
05-SpringBoot
06-MyBatisPlus
文章目录
前言
SSM(B站黑马)学习笔记 01-4-Spring 事务
01-4-Spring 事务
事务的概述
Spring事务的简介
![](https://name-pgw.oss-cn-shenzhen.aliyuncs.com/ssm_note-img/01Spring_note-img/image227.png)
Spring事务有什么好处呢,因为我们业务层实际上是组合了若干数据层的功能,所以说在业务层开事务可以保障调用的多个数据层操作处于同一个事务,同成功同失败。这就是Spring事务的一个作用, 他是为了保障组合功能的过程中事务生效。
它是如何保障的呢,其实就通过了一个接口,Spring中提供了一个叫做PlatformTransactionManager的接口—平台事务管理器,在这个接口中提供两操作,一个commit一个rollbgack。说的简单一点就是Spring在它的业务层开了个事务,提交时候大家都提交,回滚的时候大家都回滚。Spring给出了一个最基本的事务管理器实现类DataSourceTransactionManager,给出对应的DataSource就能在业务层开启对应的事务,但是他的内部用的是JDBC的事务,只要技术用的JDBC的技术就可以用它这个事务管理器的实现对象。很巧合的是Mybatis内部用的就是JDBC的事务,所以说Spring整合Mybatis如果要是用Spring的事务,用这个实现就行。
Spring事务快速入门
案例初始化
pom.xml->配置SpringConfig注解开发->整合Mybatis、JUnit->转账操作
正常执行转账操作 Tom-100 Jerry+100
当出现异常时 Tom-100 Jerry不变,显然不正常
Spring事务开启
在业务层接口添加开启事务注解(实现类也行但不建议)
配置事务管理器并告知Spring开启注解事务扫描
再次运行 金额都重置为1000 运行出现异常,事务回滚金额不变
Spring事务角色
Spring事务相关配置
![](https://name-pgw.oss-cn-shenzhen.aliyuncs.com/ssm_note-img/01Spring_note-img/image241.png)
rollbackFor
有些异常是不参与回滚的,只有error系的、运行时异常(比如NullPointException)其余都不会自动回滚,如下图
使用rollbackFor设置事务回滚异常 再次遇到IOException就会回滚事务(金额已重置1000)
propagation事务传播行为
案例初始化
try{}finally{}语句,无论是否异常都运行finally
当程序正常运行finally会执行,金额加减正常,日志也加上了
但程序运行异常,finally会被当初一个整体进行事务回滚 导致金额跟日志都被回滚无事发生 同成功同失败
解决办法:使用propagation让Log开启新事务
再次运行 出现异常,金额不变日志成功添加
注:
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员2022最新SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术