propagation属性的7个传播行为

关于propagation属性的7个传播行为 
REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执行的事务环境,如果当前没有事务,就新建一个事务。这是默认值。即有事务就在事务中执行,没有就新建一个事务 
SUPPORTS:指定当前方法加入当前事务环境,如果当前没有事务,就以非事务方式执行。即有无事务无所谓。 
MANDATORY:指定当前方法必须加入当前事务环境,如果当前没有事务,就抛出异常。 即没有事务绝对不行。
REQUIRES_NEW:指定当前方法总是会为自己发起一个新的事务,如果发现当前方法已运行在一个事务中,则原有事务被挂起,我自己创建一个属于自己的事务,直我自己这个方法commit结束,原先的事务才会恢复执行。 即有事务也得新建一个事务。
NOT_SUPPORTED:指定当前方法以非事务方式执行操作,如果当前存在事务,就把当前事务挂起,等我以非事务的状态运行完,再继续原来的事务。 即必须以非事务运行。
NEVER:指定当前方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常,只有没关联到事务,才正常执行。 即绝对不能再事务中运行。
NESTED:指定当前方法执行时,如果已经有一个事务存在,则运行在这个嵌套的事务中.如果当前环境没有运行的事务,就新建一个事务,并与父事务相互独立,这个事务拥有多个可以回滚的保证点。就是指我自己内部事务回滚不会对外部事务造成影响,只对DataSourceTransactionManager事务管理器起效。 即内部事务独立执行。

propagation属性的7个传播行为,码迷,mamicode.com

时间: 2024-12-15 01:55:01

propagation属性的7个传播行为的相关文章

Spring 声明式事务,propagation属性列表及isolation(隔离级别)

Spring 声明式事务,propagation属性列表 TransactionDefinition接口中定义,共有7种选项可用: PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行.PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常.PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,

Spring 声明式事务,propagation属性列表

TransactionDefinition接口中定义,共有7种选项可用: PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行.PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常.PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起.PROPAGATION_NOT_SUPPO

事务的传播属性

关于propagation属性的7个传播行为 REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执行的事务环境,如果当前没有事务,就新建一个事务.这是默认值. SUPPORTS:指定当前方法加入当前事务环境,如果当前没有事务,就以非事务方式执行. MANDATORY:指定当前方法必须加入当前事务环境,如果当前没有事务,就抛出异常. REQUIRES_NEW:指定当前方法总是会为自己发起一个新的事务,如果发现当前方法已运行在一个事务中,则原有事务被挂起,我自己创建

Spring事务的传播行为

事务的传播行为 一个事务方法调用另一个事务方法时,如何进行事务控制.是做为外部事务的整体控制?还是做为内部事务的部分控制?在@Transactional注解中,使用propagation属性指导事务的传播行为. required -- 有事务就行(事务默认传播行为)@Transactional(propagation=Propagation.REQUIRED) required new -- 使用自己的事务,外面调用的方法的事务被挂起.@Transactional(propagation=Pro

[转]Spring3核心技术之事务管理机制

原文地址:http://chouyi.iteye.com/blog/1675199 Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnianshilongnian.iteye.com/blog/1496953 Spring提供了许多内置事务管理器实现,常用的有以下几种: DataSourceTransactionManager:位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个ja

集成Spring事物管理

单独使用MyBatis对事物进行管理 前面MyBatis的文章有写过相关内容,这里继续写一个最简单的Demo,算是复习一下之前MyBatis的内容吧,先是建表,建立一个简单的Student表: create table student ( student_id int auto_increment, student_name varchar(20) not null, primary key(student_id) ) 建立实体类Student.java: public class Studen

MyBatis6:MyBatis集成Spring事物管理(下篇)

前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事物处理.文章内容主要包含两方面: 1.单表多数据的事物处理 2.多库/多表多数据的事物处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事物管理,前面的文章建立了一个Student相关

tx:advice

1 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 2 <tx:attributes> 3 <tx:method name="get*" propagation="SUPPORTS" isolation="DEFAULT" 4 read-only="true" />

Spring整合事务管理

不用每次 db操作 都要 开启事务  提交事务之类 了 抽取出来 事务管理方式: 编程式的(麻烦) 声明式的事务管理: 不同的框架机制 有不同的 TransactionManager JDBC  Mybatis 建表: create DATABASE spring; use spring; CREATE table book( isbn VARCHAR(50) PRIMARY KEY, book_name VARCHAR(100), price int ); CREATE TABLE book_