您的位置:首页 > 编程语言 > Java开发

spring事务隔离级别和传播行为

2015-09-30 10:40 525 查看
1、spring事务隔离级别

事务隔离级别

描述

ISOLATION_DEFAULT

Read Committed,提交后可见,可避免脏读,但无法避免不可重复读和幻读

IOSLATION_READ_COMMITTED

Read Committed,提交后可见,可避免脏读,但无法避免不可重复读和幻读

ISOLATION_READ_UNCOMMITTED

Read Uncommitted,未提交后可见,无法避免脏读、不可重复读和幻读

ISOLATION_REPEATABLE_READ

Read Repeatable,可避免脏读、不可重复读,无法避免幻读

ISOLATION_SERIALIZABLE

Serializable,序列化,可避免脏读、不可重复读和幻读

2、spring事务传播行为

事务传播行为

描述

PROPAGATION_REQUIRED

如果当前存在一个事务,则加入当前事务。如果不存在事务则创建一个新的事务。

PROPAGATION_REQUIRED_NEW

不管当前是否存在事务,都会创建新事务。如果当前存在事务,则挂起当前事务,待require new事务执行完后在重新恢复现场。

如果某个业务操作不想被外层事务影响,则比较适合PROPAGATION_REQUIRED_NEW。

比如当前业务需要记录业务log到数据库,该操作无论操作成功或失败都需要完成,则可以将记录log单独放在PROPAGATION_REQUIRED_NEW事务中。

PROPAGATION_SUPPORTS

如果当前存在一个事务,则加入当前事务。如果不存在事务则直接执行。

比如对于查询类方法PROPAGATION_SUPPORTS就是比较适合的。如果查询方法直接执行,那不需要事务支持。如果查询方法被其他已开启事务的方法调用,PROPAGATION_SUPPORTS可以保证查询方法能够加入当前事务,可洞察前事务对数据的改动。

PROPAGATION_MANDATORY

PROPAGATION_MANDATORY强制要求当前存在事务,如果不存在则抛异常。如果某个方法需要事务支持,但自身又没有管理事务提交或回滚,则比较适合PROPAGATION_MANDATORY。

PROPAGATION_NEVER

不支持事务,若当前存在事务则挂起当前事务。

PROPAGATION_NESTED

如果存在当前事务,则在当前事务的一个嵌套事务(即保存点)中执行;若无当前事务,则创建新事务。

PROPAGATION_NESTED和PROPAGATION_REQUIRES_NEW的区别是require new会挂起当前已存在事务;而nested则是寄生与当前事务,当前事务仍然处于active状态。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: