Spring学习笔记之事务
一、事务概念:事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,要么都失败,如果有一个失败则所有操作都失败。
二、事务的四个特性(ACID):
1、原子性:要么都成功要么都失败
2、一致性:操作之前和操作之后的状态时一致的
3、隔离性:事务之间相互隔离
4、持久性:操作后的影响是永久的
三、事务的使用(一般加到Service层)
事务管理底层使用了AOP原理
1、在spring配置文件配置事务管理器
2、在spring配置文件开启事务注解
(1)、在配置文件中引入名称空间tx
(2)、开启事务注解
3、在类上或者方法上使用@Transactional添加注解
四、事务操作,参数配置
1、propagation:传播行为(多事务方法直接进行调用,这个过程中事务是如何进行管理的)例如a方法调用b方法
(1)、REQUIRED(默认):如果a方法本身有事务,调用b方法后,b方法使用当前a方法里面的事务;如果a方法中没有事务,调用b方法后创建一个新事务
(2)、REQUIRED_NEW:无论a方法是否有事务,调用b方法后都创建新的事务,a方法的事务挂起
(3)、SUPPORTS:如果有事务则在当前事务中运行,否则可以不在事务中运行
(4)、NOT_SUPPORTED:当前的方法不应该在事务中运行,如果有运行的事务则挂起
(5)、MANDATORY:当前的方法必须运行在事务中,如果没有正在运行的事务则抛出异常
(6)、NEVER:当前方法不应该在事务中运行,如果有运行的事务,就抛出异常
(7)、NESTED:如果有事务在运行,当前方法就应该在这个事务的嵌套事务内运行,否则就启动一个新的事务,并在它自己的事务中运行
2、ioslation:事务隔离级别
(1)、脏读:一个未提交的事务读取到另一个未提交事务的数据
(2)、不可重复读:一个未提交的事务读到提交事务的修改的数据,一直有事务提交,每次读到的数据都不一样
(3)、幻读:一个未提交的事务读到提交事务的添加的数据
脏读 | 不可重复读 | 幻读 | |
READ UNCOMMITTED 读未提交 | 有 | 有 | 有 |
READ COMMITTED 读已提交 | 无 | 有 | 有 |
REPEATABLE READ 可重复读 | 无 | 无 | 有 |
SERIALIZABLE 串行化 | 无 | 无 | 无 |
3、timeout:超时时间(默认是-1,不超时,设置时间单位为秒)
4、readOnly:是否只读(默认是false,如果改为true则只能进行查询操作)
5、rollbackFor:回滚(设置对那些异常进行回滚)
6 、noRollbackFor:不回滚(设置对那些异常不进行回滚)