目录
- 什么叫事务
- 四大特性 ACID
- 事务操作基本流程
- spring 事务分类
- 编程式事务
- 声明式事务
- spring源码分析
- 声明式事务分析
- 声明式事务类图
- 声明式事务优缺点
1. 什么叫事务
事务是一组原子操作单元,从数据库角度讲,就是一组sql指令,通俗的解释就是:要么全部成功,要么全部失败
2. 四大特性 ACID
特性 | 解释 |
---|---|
原子性(Atomicity) | 事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用 |
一致性(Consistency) | 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的 |
隔离性(Isolation) | 可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏 |
持久性(Durability) | 指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响 |
3. 事务操作基本流程
4. spring 事务分类
4.1 编程式事务:
所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
4.2 声明式事务:
管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
5. spring源码分析
5.1 声明式事务分析
默认配置参考官网
# DAO (PersistenceExceptionTranslationAutoConfiguration)
# Whether to enable the PersistenceExceptionTranslationPostProcessor.
spring.dao.exceptiontranslation.enabled=true
5.2 声明式事务类图
5.3 编程式事务类图
5.4 声明式事务优缺点
优点: 非侵入式开发,一个普通的POJO对象,只需要加上注解就可以获得完全的事务支持
缺点: 事务只能做到方法级,不能做到代码块级别,可以使用把代码块独立为方法的方式解决