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秒后超时
spring的事务属性