文章目录
第一章 Spring 的事务处理
1.1 什么是事务
保证业务操作完整性的⼀种数据库机制 事务的4特点: A C I D
- A 原⼦性
- C ⼀致性
- I 隔离性
- D 持久性
1.2 如何控制事务
-
JDBC:
Connection.setAutoCommit(false); Connection.commit(); Connection.rollback();
-
Mybatis:
- Mybatis⾃动开启事务
sqlSession(Connection).commit(); sqlSession(Connection).rollback();
结论:控制事务的底层都是 Connection
对象完成的。
1.3 Spring 控制事务的开发
-
声明式事务
方法上加事务注解就行了。但是 注意事务失效情况。
-
编程式事务
@Autowired private TransactionDefinition transactionDefinition; @Autowired private DataSourceTransactionManager transactionManager; // 开启事务 TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition); try { // 业务操作 // ... // 提交事务 transactionManager.commit(transactionStatus); } catch (Exception e) { // 回滚事务 transactionManager.rollback(transactionStatus); log.error("..."); }
第二章 Spring中的事务属性
2.1 什么是事务属性
属性:描述物体特征的⼀系列值
性别 身⾼ 体重 …
事务属性:描述事务特征的⼀系列值
- 隔离属性
- 传播属性
- 只读属性
- 超时属性
- 异常属性
2.2 如何添加事务属性
@Transactional(isloation=,propagation=,readOnly=,timeout=,rollbackFor=, noRollbackFor=,)
2.3 事务属性详解
2.3.1 隔离属性
四种隔离级别
//TODO
2.3.2 传播属性
概念:他描述了事务解决嵌套问题的特征
什么叫做事务的嵌套:他指的是⼀个⼤的事务中,包含了若⼲个⼩的事务
问题:⼤事务中融⼊了很多⼩的事务,他们彼此影响,最终就会导致外部⼤的事务,丧失了 事务的原⼦性
传播属性的值及其⽤法
传播属性的值 | 外部 不存 在事 务 | 外部存在事务 | 备注 |
---|---|---|---|
REQUIRED(默认) | 开启 新的 事务 | 融合到外部事 务中 | 增删 改⽅ 法 |
SUPPORTS | 不开 启事 务 | 融合到外部事 务中 | 查询 ⽅法 |
REQUIRES_NEW | 开启 新的 事务 | 挂起外部事 务,创建新的 事务 | ⽇志 记录 ⽅法 中 |
2.3.3 只读属性
针对于只进⾏查询操作的业务⽅法,可以加⼊只读属性,提供运⾏效率
默认值:false
2.3.4 异常属性
Spring事务处理过程中
默认 对于RuntimeException及其⼦类 采⽤的是回滚的策略
默认 对于Exception及其⼦类 采⽤的是提交的策略
rollbackFor = {java.lang.Exception,xxx,xxx}
noRollbackFor = {java.lang.RuntimeException,xxx,xx}
@Transactional(rollbackFor = {java.lang.Exception.class},noRollbackFor = {java.lang.RuntimeException.class})
建议:实战中使⽤ RuntimeExceptin
及其⼦类 ;使⽤事务异常属性的默认值