spiring 事务 PROPAGATION_REQUIRES_NEW

外事务A为PROPAGATION_REQUIRED,嵌套事务为一个循环B为PROPAGATION_REQUIRES_NEW.

[code="java"]function A{
for(...){
funciton B(
save();
);
}
}[/code]
为什么不能每次循环保存到数据库中,而是只有当A事务执行完后,B中的才可保存到数据空中?
[code="java"] class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">



PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly

PROPAGATION_REQUIRED,-Exception


PROPAGATION_REQUIRED,-Exception


PROPAGATION_REQUIRED,-Exception


PROPAGATION_REQUIRED,-Exception

PROPAGATION_REQUIRED,-Exception

PROPAGATION_REQUIRED,-Exception


PROPAGATION_REQUIRES_NEW,-Exception


[/code]

0

2个回答

你要弄懂Spring事务实现原理,是通过AOP实现的。Spring使用JDK Proxy或cglib重写一个类,代替原来的类,使用拦截器拦截原来的方法调用。
Controller A调用Service A的方法是,实际是调用TransactionInterceptor,方法被拦截,加上事务处理
你这儿是Service A类a方法调用自己的方法b方法,是内部调用,b方法还是Service A类的,而不其AOP 代理类,所有只有a方法的事务,若其他类调用b方法才有事务。

0

不错,有道理呀 :)

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring事务传播机制Propagation.REQUIRES_NEW详解及测试
REQUIRES_NEW官方文档解释: Create a new transaction, and suspend the current transaction if one exists. 意思是,创建一个新事务,如果当前存在事务,将这个事务挂起。也就是说如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。 先来总结一下结果: 1.标志REQUIR...
工作踩的坑之六spring事务管理的PROPAGATION_REQUIRES_NEW误解
先来说说问题吧,用户投资的时候,调第三方接口,如果投资正常的话,第三方是会给我们返回相应信息,然后我们这边再自己生成投资记录之类的。但是也有一些莫名原因,比如说调第三方接口超时了,没有给我们返回信息,但是第三方又冻结成功了,这笔资金其实是投资失败的,我们这边没有记录,但是第三方账户的资金是冻结了,而且可用金额少了。这种时候,因为我们这边没有记录,是不容易查找问题的,只能通过第三方给我们查找。那我们
2.2 REQUIRES_NEW不起作用导致整个事务回滚——Spring事务传播机制
1、Propagation.REQUIRES_NEW的作用假设有个对象A,有a()方法,有个对象B,有b()方法。在a方法中调用了b方法,b方法被称为内嵌事务,不管a方法是否开启事务,只要b方法的事务的隔离级别为REQUIRES_NEW,则一定会在调用b方法时产生一个新的事务。2、一个场景A的a()方法:[java] view plain copy    @Transactional      p...
spring事物管理
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播 PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER PROPAGATION_NESTED
spiring mvc mybatis代码
spiring mvc mybatis代码
事务挂起引起的死锁问题
不要在多线程业务里使用NOT_SUPPORTED、REQUIRES_NEW等会造成事务挂起的事务传播属性。 问题分析:假如数据库连接池最大为20,那么有11个以上的并发事务在执行中又被挂起,就会引起连接池死锁,因为在事务挂起时,所需连接数会翻倍,而当前事务被挂起后连接是无法释放的,新的事务再去获取连接就获取不到,造成死锁。 ...
Spring中声明式事务的注解@Transactional的参数的总结(REQUIRED和REQUIRES_NEW的与主方法的回滚问题)
一、事务的传播行为 1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 2.属性 事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。 系统默认的是REQUIRED属性。 常用的是REQUIRED和REQUIRES_NEW,所以此处只说明这两种属性。 下
访问权限控制模块(二)
开发工具与关键技术: Visual Studio 权限模块 作者:黎凤焕 撰写时间:2019年 6 月 17 日 模块权限设置有两个方法,首先设置模块权限,获取用户ID,第一个方法是先隐藏,后显示,第二个方式是删除没有的。了解了方法一,现在了解权限的方法二。 $(function () { //模块权限设置 var UserID = @Session[“UserID”];//获取用户I...
Zookeeper专题——1、分布式事务(a概述)
zookeeper到底是什么?  zookeeper实际上是yahoo开发的,用于分布式中一致性处理的框架。最初其作为研发hadoop时的副产品。由于分布式系统中一致性处理较为困难,其他的分布式系统没有必要 费劲重复造轮子,故随后的分布式系统中大量应用了zookeeper,以至于zookeeper成为了各种分布式系统的基础组件,其地位之重要,可想而知。著名的hadoop,kafka,dubbo 都...
SpringBoot学习笔记之五-Web开发Thymeleaf模板引擎
模板引擎 常用的模板引擎:JSP,Velocity,Freemarker,Thymeleaf等等 SpringBoot使用嵌入式的Tomcat,默认不支持JSP 模板引擎的作用:写一个页面模板 SpringBoot推荐Thymeleaf,语法更简单,功能更强大 用法: (1)引入模板引擎,在pom.xml文件中添加依赖: <!--引入模板引擎--> <depe...
Spring事务管理及几种简单的实现
事务是逻辑上的一组操作,这组操作要么全部成功,要么全部失败,最为典型的就是银行转账的案例:A要向B转账,现在A,B各自账户中有1000元,A要给B转200元,那么这个转账就必须保证是一个事务,防止中途因为各种原因导致A账户资金减少而B账户资金未添加,或者B账户资金添加而A账户资金未减少,这样不是用户有损失就是银行有损失,为了保证转账前后的一致性就必须保证转账操作是一个事务。事务具有的ACID特性,参
Spring分布式事务- 三种实现方式(Spring+JTA)
分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算机资源上访问并且更新数据,将两个或多个网络计算机的数据进行的多次操作作为一个整体进行处理。如不同银行账户之间的转账。对于在项目中接触到JTA,大部分的原因是因为在项目中需要操作多个数据库,同时,可以保证操作的原子性,保证对多个数据库的操作一致性。 项目结构图
Spring(5.1、基于xml的事物)
Spring配置式事物(基于xml) 文件目录结构 java类 public interface BookShopDao { public int findBookPriceByIsbn(String isbn); public void updateBookStock(String isbn); public void updateUserAccount(St
mybatis常用配置——resultMap
mybatis中的查询sql查询出来的列如果和pojo对象中的字段一一对应且都是简单类型时,就可以用resultType来配置返回的结果。 但是经常是pojo对象中包含另外一个pojo对象或者pojo对象里包含一个list对象,这种情况下就要用到resultMap这个功能。 1.POJO对象: pojo对象: public class ProductDTO {
Spring Cloud版本与Spring Boot版本的依赖关系
Finchley需要Spring Boot 2.0.x Dalston版本和Edgware版本是在Spring Boot 1.5.x上构建 Camden 版本是在 Spring Boot 1.4.x上构建的,但是也和Spring Boot 1.5.x进行过测试。所以可以认为是能够和Spring Boot 1.5.x一起工作的。   Spring Cloud Spring Boot ...
sringcloud应用案例总结
一、简述 简单应用及问题整理。 版本:Finchley.SR1 不同版本差异描述 二、 简单server样例 案例采用maven工程。 父类pom.xml <parent> <groupId&amp
本人整合的Springmvc+spring+mybatis ssm框架的用到的lib包
自己ssm项目用到的lib包,初学的时候找得很辛苦,所以现在上传上来。 初学者千万别用4版本的spiring包,感觉挺不稳定的
在Spring中使用PROPAGATION_REQUIRES_NEW带来的缓存问题
SSH架构 业务原型:   在一级事务T1中查询出id为12345的持久化对象A1,并修改了A1的memo属性,T1提交之前调用了一个方法M,M中使用PROPAGATION_REQUIRES_NEW开启了一个新的事务T2,在T2中又查询出id为12345的持久化对象A2,修改了A2的memo属性,在T2提交后,A2的memo变化被同步到数据库中,但是在T1提交后A1所做的修改却没有同步到数据...
spring 事务(6中配置完全降解)
spring 事务spring 事务spring 事务spring 事务spring 事务
Utracker事务状态和处理流程事务状态和处理流程事务状态和处理流程
事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程
Spring 事务配置
Spring 事务配置SpringSpring 事务配置Spring 事务配置Spring 事务配置Spring 事务配置Spring 事务配置
《WCF按部就班学习系列7_WCF事务概述》
WCF事务的概述,WCF事务属性、事务管理、事务协议、事务管理器、实例模式与事务、事务编程概述和源码下载
SQL深入 事务与游标编程
事务与游标编程 事务与游标编程 事务与游标编程 事务与游标编程 事务与游标编程
Utracker事务状态和处理流程
事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程事务状态和处理流程
班级事务信息管理系统课程设计
班级事务信息管理系统班级事务信息管理系统班级事务信息管理系统班级事务信息管理系统班级事务信息管理系统班级事务信息管理系统班级事务信息管理系统
SAP事务码查询///////////////////
SAP事务码查询SAP事务码查询SAP事务码查询SAP事务码查询SAP事务码查询SAP事务码查询SAP事务码查询
C# 文件系统事务工具包
C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包C# 文件系统事务工具包
SpringBoot入门学习(三)~~ SringBoot启动的三种方式
  目录 SringBoot启动的三种方式 一、启动SpringBoot项目的三种方式 第一种方式 — — 程序代码启动 第二种方式 — —插件spring-boot-maven-plugin启动 第三种方式 — —打包的方式启动 总结: SringBoot启动的三种方式 前面我们已经知道“创建SpringBoot项目”的三种方式。而且在前面也稍稍介绍了如何去启动SpringBo...
大事务拆分项目应用-再看事务嵌套
一、何为事务嵌套最简单的事务嵌套情况:开启了一个事务的情况下,再开启一个事务2。或者:在t1、t2分别为两个事务操作,而外层t3事务包含t1(t2),t3跟t1(t2)         OR          例如在支付系统中,在进行支付校验时,事务1负责更新账单状态&插入历史表,事务2负责创建支付记录及明细,如果假设更新账单状态成功,二创建支付记录失败,则导致账单状态与支付状态丢失数据一...
Storm中涉及到的类
Storm事务中涉及到的类,以及在非事务、事务、分区事务、不透明分区事务的比较的信息汇总
SAP事务码清单.xls事务码清单.xls
事务码清单.xls事务码清单.xls事务码清单.xls事务码清单.xls事务码清单.xls
oracle学习笔记 事务概述
oracle学习笔记 事务概述 这节课讲oracle的事务 一)什么是事务 oracle的事务单纯从开发角度来讲它比较简单 很多人认为oracle的事务就是两个,一个是commit一个是rollback oracle中最重要的就是数据的一致性、数据的安全以及oracle数据的优化 这几块是非常重要的 事务它关系到数据的一致性 对oracle数据库来讲或者对任何数据库来讲数据
MySQL与Spring事务管理
数据库事务是保证在并发情况下能够正确执行的重要支撑,MySQL常见的数据库引擎中支持事务的是InnoDB,事务就是一系列操作,正确执行并提交,如果中途出现错误就回滚。事务要保证能够正常的执行,就必须要保持ACID特性,这在前面的文章当中有提到,本文也偏重spring的事务管理配置demo因此不做过多的概念介绍,网上的资料已经比较丰富。这是HeidiSQl截图查看不同引擎的特性: 数据库的事务的隔离
事务事务事务
    @Transactional( rollbackFor = {Exception.class}, readOnly = false )
MongoDB支持事务
DAO层: package com.method.userservice.service; import com.method.userservice.entity.BaseEntity; import com.method.userservice.util.Reflact; import com.mongodb.client.MongoCollection; import com.mong...
spring学习事务源码
spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码
spring事务和myBatis事务的设置
spring事务和myBatis事务的设置
MongoDB4.0支持事务管理
背景 最后我们看一下MongoDB的事务管理,本来是没这一篇的,因为网上大部分资料太老,都为MongoDB之前的版本,的确在MongoDB 4.0版本之前是没有事务管理,但是今天年初MongoDB发布了4.0版本,其中最重大的标志就是引入了事务管理。官方网址传送门,打不开的可以看下面的图片。 知道了MongoDB的事务管理,我们来试试水,这个事务管理怎么玩。 怎么玩 我们先试试在普...
嵌套事务总结
最近线上发生了一起故障,是关于嵌套事务未回滚的问题,这里记录一下。 发生故障的场景是:  主方法parent()里调child()方法,当child()抛出异常时,parent()和child()均未回滚。背景先介绍到这里,你可以先想想为什么没回滚,下面由浅入深讲解。 ------------------------------------华丽的分割线------------------...
Spring事务的理解(包含与mysql事务之间的联系)
导论:Spring事务有四种特性:ACID,五种隔离级别:default、read_uncommitted、read_committed、repeatable_read、serializable,七种传播行为:默认为required 一:事务的传播行为:         也就是一个事务传到另外一个事务或者没有事务的方法上面。spring默认的事务传播行为为:PROPAGATION_REQUIR...