Spring - 事务

1. Spring 事务实现方式有哪些

  • 声明式事务:声明式事务有两种实现方式,基于 xml 配置文件的方式和注解方式
  • 编码方式:提供编码的形式管理和维护事务

2. 说一下 Spring 的事务隔离

Spring 有五大隔离级别,默认值为 使用数据库的设置,其他四个隔离级别和数据库一样

  • 读未提交:最低的隔离级别,事务提交前,就可以被其他事务读取到
  • 读已提交:一个事务提交后才能被其他事务读取到
  • 可重复读:保证多次读取同一个数据是,其值都和事务开始时候是一致的(防止不可重复读),Mysql 的默认级别
  • 序列化:代价最高最可靠的隔离级别,该隔离级别可以防止脏读,幻读,不可重复读

脏读: 表示一个事务能够读取到另一个事务还未有提交的数据

不可重复读: 在一个事务内,多次读取同一个数据不一样

幻读: 统一个书屋内,多次查询的结果不能一样(记录的数据不一样)

3. 事务传播行为

事务行为 说明
PROPAGATION_REQUIRED 支持当前事务,假设当前没有事务。就新建一个事务
PROPAGATION_SUPPORTS 支持当前事务,假设当前没有事务,就以非事务方式运行
PROPAGATION_MANDATORY 支持当前事务,假设当前没有事务,就抛出异常
PROPAGATION_REQUIRES_NEW 新建事务,假设当前存在事务。把当前事务挂起
PROPAGATION_NOT_SUPPORTED 以非事务方式运行操作。假设当前存在事务,就把当前事务挂起
PROPAGATION_NEVER 以非事务方式运行,假设当前存在事务,则抛出异常
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作

4. 事务注解的常用参数

参数名称 功能描述
readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false
rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚
rollbackForClassName 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚
noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚
noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚
propagation 该属性用于设置事务的传播行为
solation 该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置
timeout 该属性用于设置事务的超时秒数,默认值为-1表示永不超时
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Spring – 事务