spring的事务属性

spring的事务属性包括:

  • propagation
  • isolation
  • no-rollback-for
  • read-only
  • rollback-for
  • timeout

propagation

事务传播属性

定义:就是在多个业务层之间相互调用时传递事务的过程称之为事务传播(将事务对象在业务层之间进行传递的过程)

属性值的区别:

propagation的值 释义 具体描述
REQUIRED 需要事务 如果外层没有事务,则开启新的事务;如果外层存在事务,则融入当前事务
SUPPORTS 支持事务 如果外层没有事务,则不会开启新的事务;如果外层存在事务,则融入当前事务
REQUIRES_NEW 每次开启新的事务 如果外层没有事务,则开启新的事务;如果外层存在事务,则外层事务挂起,自己开启新的事务执行,执行完成后,恢复外层事务
NOT_SUPPORTED 不支持事务 如果外层没有事务,则不会开启新的事务;如果外层存在事务,则外层事务挂起,自己以非事务的方式执行,执行完后,恢复外层事务
NEVER 不能有事务 存在事务则报错
MANDATORY 强制事务 没有事务则报错
NESTED 嵌套事务 事务之间可以嵌套运行,不过目前数据库 oracle mysql 支持不太友好

isolation

事务隔离级别

属性值的区别:

isolation的值/隔离级别 释义 具体描述
DEFAULT [推荐]使用数据库默认的隔离级别
READ_UNCOMMITTED/最低 读未提交 脏读现象:一个客户端读到了另一个客户端没有提交的数据
READ_COMMITTED 读已提交 避免脏读现象:一个客户端只能读到另一个客户端提交的数据
REPEATABLE_READ 可重复读 行锁: 主要是用来避免不可重复读现象的出现
SERIALIZABLE/最高 序列化读 表锁: 主要是用来避免幻影读现象的出现

注意:

  • oracle 默认使用 READ_COMMITTED
  • mysql 默认使用 REPEATABLE_READ
  • 隔离级别越高,查询效率越低,一般推荐使用数据库默认隔离级别

read-only

事务读写性

属性值的区别:

read-only的值 释义 具体描述
true 只读 不能执行增删改操作
false 可读可写 能执行增删改操作

注意:

  • mysql支持,oracle不支持

rollback-for

出现什么类型异常回滚

默认出现RuntimeException及其 子类 异常回滚

no-rollback-for

出现什么类型异常不回滚

比如:设置了 java.lang.RuntimeException 则报RuntimeException异常后,事务不回滚

timeout

事务超时性

  • 默认-1:代表永不超时
  • 设置 >=0正整数:代表设置超时时间为多少秒,比如 设置为1,则就是1秒后超时
作者

buubiu

发布于

2020-08-08

更新于

2024-01-25

许可协议