spring的事务属性
spring的事务属性包括:
propagationisolationno-rollback-forread-onlyrollback-fortimeout
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_COMMITTEDmysql默认使用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的事务属性