Propagation(事务传播属性)

类别 传播类型 说明
支持当前事务 REQUIRED 如果当前没有事务,就新建一个事务。@Transaction的默认选择
支持当前事务 SUPPORTS 就以非事务的方式运行。
支持当前事务 MANDATORY 如果当前没有事务,就抛出异常。
不支持当前事务 REQUIRES_NEW (隔离) 如果当前存在事务,就把当前事务挂起,执行当前新建十五完成后,上下文事务恢复后再执行。
不支持当前事务 NOT_SUPPORTED(不支持) 以非事务的方式执行操作;如果当前存在事务,就把当前事务挂起,执行当前逻辑,结束后恢复上下文的事务。
不支持当前事务 NEVER(强制非事务) 以非事务的方式执行,如果当前存在事务,则抛出异常。
嵌套事务 NESTED(嵌套事务) 如果当前存在事务,则嵌套在事务中执行。类似RERQUIRED的特征。
调用示例

ServiceA

ServiceA {
void methodA() {
ServiceB.methodB();
}
}

ServiceB

ServiceB {
void methodB() {
}
}
REQUIRED

假设当前运行的事务不在另外一个事务里,那么久新起一个事务;比如,ServiceB.methodB的事务定义级别是PROPAGATION_REQUIRED,那么在执行ServiceA.methodA的时候,ServiceA.methodA已经起了事务。这是调用ServiceB.methodB,ServiceB.methodB看到自己已经执行在ServiceA.methodA的事务内部,就不再启动新事物。如果ServiceA.methodA没有事务,那么B回自己启动一个事务。这样A、B两个方法不管哪个方法发生异常,他们都会一起回滚,一荣俱荣。

SUPPORTS

假设当前在事务中。即以事务的形式执行。假设当前不在一个事务中,那么就以非事务的形式执行

MANDATORY

必须在同一个事务中执行。也就是说它仅仅能被一个父事务调用。否则它就要抛出异常。

REQUIRED_NEW

与REQUIRED相反的是,B方法不管调用它的有没有事务开启,他都会自己开启事务,管好他自己的一某三分地。A,B分别处于两个不同的事务中,两方法的结果互不影响。

NOT_SUPPORTED

当前不支持事务。比方ServiceA.methodA的事务级别是PROPAGATION_REQUIRED 。而ServiceB.methodB的事务级别是PROPAGATION_NOT_SUPPORTED ,那么当执行到ServiceB.methodB时。ServiceA.methodA的事务挂起。而他以非事务的状态执行完,再继续ServiceA.methodA的事务。

NEVER

不能在事务中执行。

如果ServiceA.methodA的事务级别是PROPAGATION_REQUIRED。 而ServiceB.methodB的事务级别是PROPAGATION_NEVER ,那么ServiceB.methodB就要抛出异常了。

NESTED

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

Spring事务的隔离级别

类型 说明
ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应
ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
ISOLATION_SERIALIZABLE 是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

Spring 事务传播机制和数据库的事务隔离级别的更多相关文章

  1. Spring事务传播机制和数据库隔离级别

    Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...

  2. 数据库事务的隔离以及spring的事务传播机制

    数据库的事务隔离: MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”RR(REPEATABLE READ). oracle默认的是提交读.RC 未提交读(READ UNCOMMITTE ...

  3. 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

    数据库事务的四大特性以及事务的隔离级别   本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ ...

  4. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  5. Spring事务传播机制与隔离级别(转)

    Spring事务传播机制与隔离级别 博客分类: Spring   转自:http://blog.csdn.net/edward0830ly/article/details/7569954 (写的不错) ...

  6. spring事务传播机制的测试结果

    /**     * @Component是个一般性的注解,使用此注解修饰的POJO类,有value属性,指定bean的id.也可不写.默认值是类名首字母小写     * @Resource是控制依赖注 ...

  7. 面试突击87:说一下 Spring 事务传播机制?

    Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的. 既然是"事务传播",所以事务的数量应该在两个或两个以上,Spring 事务传播机制的 ...

  8. 一天十道Java面试题----第五天(spring的事务传播机制------>mybatis的优缺点)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 41.spring的事务传播机制 42 .spring事务什么时候会失效 43 .什么的是bean的自动装配.有哪些方式? ...

  9. Spring事务传播机制&隔离级别

    一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...

随机推荐

  1. python语法基础-网络编程-HTTP协议

    ###############    HTTP协议    ############## """ 当你在浏览器地址栏敲入“http://www.cnblogs.com/”, ...

  2. html为什么用雪碧图的优缺点

    CSS Sprite(雪碧图/精灵图) 1          概念解释 将小图标和背景图像合并到一张图片上,然后利用css的背景/定位来显示需要显示的图片部分. 2           优点 ① 减少 ...

  3. HBase单机安装及Phoenix JDBC连接

    HBase是建立在Hadoop文件系统之上的分布式面向列的数据库,它是横向扩展的.它利用了Hadoop的文件系统(HDFS)提供的容错能力. HBase提供对数据的随机实时读/写访问,可以直接HBas ...

  4. ArcGIS自定义坐标变换中的方法说明

    在10.1里面,一共提供了12种转换的方法,如下: Ø  Geocentric_Translation Ø  Molodensky Ø  Molodensky_Abridged Ø  Position ...

  5. git相关学习地址

    https://git-scm.com/book/zh/v2    这篇文章写得不错,值得一读

  6. 吴裕雄--天生自然 HADOOP大数据分布式处理:安装配置MYSQL数据库

    安装之前先安装基本环境:yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs # 下载mysql源安 ...

  7. python后端面试第四部分:django框架--长期维护

    1 列举Http请求中常见的请求方式  https://www.cnblogs.com/andy0816/p/12360866.html2 谈谈你对HTTP协议的认识.1.1 长连接  https:/ ...

  8. OpenCV C++常用功能介绍

    显示图片 IplImage* img = cvLoadImage("-/temp.jpeg", 1); //create a window to display the image ...

  9. 林轩田机器学习基石课程学习笔记5 — Training versus Testing

    上节课,我们主要介绍了机器学习的可行性.首先,由NFL定理可知,机器学习貌似是不可行的.但是,随后引入了统计学知识,如果样本数据足够大,且hypothesis个数有限,那么机器学习一般就是可行的.本节 ...

  10. Django ORM单表查询必会13条

    必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...