Spring事务管理
1. Spring事务管理 1-1
1.1. Spring事务概述 1-1
1.2. Spring事务案例分析 1-1
2. Spring声明式事务处理 2-2
2.1. 基于注解方式实现 2-3
2.2. 基于xml方式实现 2-3
3. Spring事务增强 3-5
3.1. Spring事务的传播特性 3-5
3.2. Spring事务的隔离级别 3-6
4. 总结 4-8
4.1. 重点和难点分析 4-8
4.2. 常见FAQ 4-8
Spring事务管理
Spring事务概述
事务是一个不可分割的逻辑工作单元,具备ACID特性,实际工作中可借助Spring进行事务管理。
事务四大特性:ACID
子型事务中的多个操作要么都成功要么都失败
一致性(例如存钱操作,存之前和存之的应该是一致的
隔离性(事务与事务应该是相互隔离的
持久性(事务一旦提交,数据要持久保存
Spring提供了两种事务管理方式,编程式事务和声明式事务。编程式事务指的是通过编码方式实现事务;声明式事务基于AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染,因此在实际使用中声明式事务用的比较多。
Spring中声明式事务处理有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional注解的方式。
本讲重点讲解实际项目中最常用的声明式事务管理,以简化事务的编码操作。
Spring事务案例分析
例如现有两个订单操作,需要更新库存。
当库存充足时两个事务都可以成功,当库存不够时有的事务就要回滚。
说明:Spring声明式事务管理底层基于AOP实现
Spring声明式事务处理
基于注解方式实现
Step1:在spring配置文件中启用事务注解
配置事务管理器
配置事务处理方式
propagation="REQUIRED"
isolation="READ_COMMITTED"
timeout="-1"
read-only="false"
rollback-for="java.lang.Throwable"
no-rollback-for=”NoTransactionException"/>
课堂练习:
Step01:定义事务管理器
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
定义事务策略
事务传播特性:方法之间相互时事务的传播方式重点掌握Propagation.REQUIRED@Transactional(propagation=Propagation.REQUIRED)如果没有事务创建新事务,如果当前有事务参与当前事务
@Transactional(propagation=Propagation.REQUIRES_NEW)
必须是新事务,如果有当前事务,挂起当前事务并且开启新事务.
课后了解:
@Transactional(propagation=Propagation.MANDATORY)必须有事务,如果当前没有事务就抛异常
@Transactional(propagation=Propagation.NEVER)绝对不能有事务,如果在事务中调用则抛出异常
@Transactional(propagation=Propagation.NESTED)必须被嵌套到其他事务中
@Transactional(propagation=Propagation.NOT_SUPPORTED)不支持事务
@Transactional(propagation=Propagation.SUPPORTS)支持事务,如果没有事务也不会创建新事务
事务,不可重复,幻读
更改会话级的隔离级别
更改系统级的隔离级别
思考:
1)MySQL中如何查看当前系统默认隔离级别?
showvariableslike''%storage_engine%'';
2)MySQL中如何设置事务隔离级别?
setsessiontransactionisolationlevel''reapableread''
总结
重点和难点分析
常见FAQ
1-6
JAVA培优qilei@tedu.cn
|
|