首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring @ a()调用b()和c()中的事务性传播

在Spring框架中,@Transactional注解用于声明事务性方法。事务性传播是指在一个事务方法中调用其他事务方法时,如何处理事务的传播行为。

Spring框架提供了多种事务传播行为,其中包括REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED。

  1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为。推荐的腾讯云相关产品是云数据库MySQL版,产品介绍链接地址:https://cloud.tencent.com/product/cdb
  2. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。适用于不需要强制事务的场景。推荐的腾讯云相关产品是云数据库Redis版,产品介绍链接地址:https://cloud.tencent.com/product/redis
  3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。适用于必须在事务中执行的场景。
  4. REQUIRES_NEW:每次都创建一个新的事务,如果当前存在事务,则挂起当前事务。适用于需要独立事务执行的场景。
  5. NOT_SUPPORTED:以非事务的方式执行方法,如果当前存在事务,则挂起当前事务。适用于不需要事务支持的场景。
  6. NEVER:以非事务的方式执行方法,如果当前存在事务,则抛出异常。适用于不允许在事务中执行的场景。
  7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是外部事务的一部分,可以独立提交或回滚。适用于需要嵌套事务支持的场景。

以上是Spring框架中事务性传播的分类和概念。具体选择哪种传播行为取决于业务需求和场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring事务嵌套事务实现示例

Spring事务,嵌套事务是通过事务传播行为可选事务管理器来实现。...嵌套事务是指一个事务包含了另一个事务,在外层事务范围内,内层事务可以单独进行提交或回滚,并且外层事务提交或回滚不会受到内层事务影响。...// ... }}在上述代码,外层事务由outerMethod()方法表示,并通过@Transactional注解来定义事务属性。...在执行到innerService.innerMethod()时,会调用内层服务innerMethod()方法,此时内层事务会在外层事务范围内开启。...在内层事务执行过程,如果发生异常,内层事务会被回滚,但外层事务仍然继续执行。最后,根据外层事务提交或回滚决定是否将外层事务及其包含内层事务一起提交或回滚。

66391

我现在A函数开启事务,然后调用B函数,B函数也开启了事务

有一点要知道,就是MYSQL不支持事务嵌套。 所以PHP再包装,也是一个事务 laravel事务嵌套,就是一个栈。...事务A开启事务(真实开启) 事务B开启事务(只是标记,并非真实开启了事务) 事务B提交事务(只是标记,并非真的提交了事务) 事务A提交事务(真实提交) 事务A开启事务(真实开启) 事务B开启事务(只是标记...,并非真实开启了事务) 事务B提交事务(只是标记,并非真的提交了事务) 事务A回滚事务(真实回滚) 从这个栈就能看出来,只有第一次开启事务第一次回滚事务最后一次提交事务,是真实操作了数据库,其他事务操作都是假...https://github.com/Zhucola/yii_core_debug/blob/master/%5B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B3%BB%E5%88%97%...E4%B8%89%5D%E4%BA%8B%E5%8A%A1%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90.md 参考:https://learnku.com/articles/

43520
  • Spring事务

    Spring事务 配置事务 spring配置文件 <?xml version="1.0" encoding="UTF-8"?...Spring事务传播特性(propagation 属性) REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。...(3)这时,虽然客户端B事务还没提交,但是客户端A就可以查询到B已经更新数据。...3)这时,客户端B事务还没提交,客户端A不能查询到B已经更新数据,解决了脏读问题; (4)客户端B事务提交; (5)客户端A执行与上一步相同查询,结果 与上一步不一致,即产生了不可重复读问题...一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录,这样可以防止幻读; 3、事务隔离级别为串行化时,读写数据都会锁住整张表; 4、隔离级别越高,越能保证数据完整性一致性,但是对并发性能影响也越大

    42520

    Spring事务专题(四)Spring事务使用、抽象机制及模拟Spring事务实现

    事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题内容能够更丰富,更加详细」,本来是想在源码分析文章附带讲一讲事务使用问题,这两天想了想还是单独写一篇并作为事务专题收尾篇,也是我Spring...会在事务上下文中调用。...Spring事务同步机制 Spring事务相关同步机制可以分为两类 资源同步 行为同步 什么是资源同步呢?...,大家把代码拷贝过去自行测试就好了 总结 本文主要介绍了Spring事务相关内容,对Spring事务抽象机制做了介绍,主要是为了让大家在接下来一篇源码文章能减轻负担,希望大家可以根据自己理解动手模拟下...Spring事务实现哦,当你自己去实现时候肯定会碰到一系列问题,然后带着这些问题看源码你才能知道Spring为什么要做这些事情!

    97220

    javaA继承BB继承C,new A()对象,BCthis属于谁

    print() { System.out.println("这是Cthis调用"); } } class B extends C{ public B() {...("====================="); } } 就这么一看,先调用C构造方法,再调用B构造方法,最后调用A构造方法,可是CB构造方法A构造方法中都有this,难道是C里面的this...看一下运行结果 C构造方法 这是Athis调用 B构造方法 这是Athis调用 A构造方法 这是Athis调用 ===================== C构造方法 这是A...this调用 B构造方法 这是Athis调用 A构造方法 这是Athis调用 ===================== C构造方法 这是Athis调用 B构造方法 这是...Athis调用 A构造方法 这是Athis调用 ===================== 结果3个都是A对象,因为在main方法创建都是A对象,A继承了BB继承了C,实际运行this

    34410

    Spring 实现事务方式

    Spring 并不直接支持事务,只有当数据库支持事务时,Spring 才支持事务Spring 只不过简化了开发人员实现事务步骤。 Spring 提供了两种方式实现事务。 声明式编程式。...但是,如果程序中用到大力事务操作,声明式事务方式更适合,它使得事务管理业务逻辑分离。...对@Configuration 类会特殊处理;dataSource() 方法虽然在 jdbcTemplate 方法 transactionManager 方法调用,但是实际返回都是容器那个对象...; jdbcTemplate.update(sql, title,content); } } 4.Service 层,调用 dao 方法,事务注解在这一层。...编程式实现方式 对于编程式实现事务管理方式,Spring 也提供两种方法实现: 使用 TransactionTemplate 使用 PlatformTransactionManager。

    3.5K30

    Spring事务传播行为

    当我们在spring调用Service中一个方法时,如果我们默认配置了对Service事务管理,那么此时Service将运行在一个由spring管理事务环境。...由于在我们日常开发时,通常会在一个Service接口中调用其它Service接口以此来完成一个完整事务操作,这时就会发生服务接口嵌套调用情况,spring通过事务传播行为控制当前事务如何传播到被嵌套调用目标服务接口方法...虽然我们不会直接采用编码方法进行事务管理,但在spring还是提供了对该方法支持。...在spring声明式事务管理是通过spring AOP功能实现。具体流程是通过事务声明信息,spring负责将事务管理增强逻辑动态织入到业务方法相应连接点中。...我们可以看到,采用xml管理事务直接用编码方法有很大不同,在接口实现类只有相关业务代码,并不会有任何相关事务代码,而用直接编码方法则必须手动将管理事务代码编写在接口实现类

    1.2K40

    Spring学习笔记(五)——JdbcTemplatespring声明式事务

    还需要导入一个 spring-tx-5.0.2.RELEASE.jar(它是事务相关)。...,int.class,2000); System.out.println(count); } } spring声明式事务 spring基于XML声明式事务控制配置步骤 1、...:给事务通知提供一个事务管理器引用 3、配置AOP通用切入点表达式 4、建立事务通知切入点表达式对应关系 5、配置事务属性 是在事务通知tx:advice标签内部 * isolation...--spring基于xml声明式事务控制配置步骤 1.配置事务管理器 2.配置事务通知 3.配置aop通用切入点表达式 4.建立事务通知切入点表达式对应关系...然后用spring声明式事务进行对事务进行管理,保证事务一致性,报错时进行事务回滚,导致不会出现一方转账出去,另一方接收不成功。 spring基于注解声明式事务转账案例 bean.xml <?

    66220

    【转载】Spring 事务传播方式

    Spring 事传播行为: spring 特有的事务传播行为,spring 支持 7 种事务传播行为,确定客户端调用事务边界(说得通俗一点就是多个具有事务控制 service 相互调用时所形成复杂事务边界控制...(如果被调用端发生异常,那么调用调用事务都将回滚) PROPAGATION_SUPPORTS(XML 文件为 SUPPORTS) 表示当前方法不必需要具有一个事务上下文,但是如果有一个事务的话...A.methodA() 调用 B methodB() 方法,那么如果 A 方法包含事务,则 B 运行在此事务环境,如果 A 方法不包含事务,则 B 运行在非事务环境; 1、如果 A 没有事务,...方法有事务并且执行过程抛出异常,则 A.methoda() B.methodb()执行操作被回滚; 3、如果 A methoda() 方法有事务,则 B.methodB() 抛出异常时,A ..., 表示不适合在有事务操作调用,因为 report() 太耗时。

    63520

    lua c调用

    首先,假设需要在lua调用一个在c实现求和函数,函数名add(a,b)。 我给这个测试库取名为dylib,它包含一个函数add。...lua这样使用: local dylib = require "dylib.test" local c = dylib.add(1,2) print(c) 上面的dylib.test就是我编译生成dylib...int c = a+b; lua_pop(L,2); lua_pushnumber(L,c); return 1; } 这函数就是把两参数加起来,然后返回。...比如有这样场景,在测试需要加载同一模块不同版本,而获得版本之间性能区别。那么我们如何加载同一模块不同版本呢?...比如:如果一个模块名称为a-b,require就会认为它open函数名为luaopen_b,并不是luaopen_a-b。现在好了,对于上面提出不同版本进行测试需求,就可以迎刃而解了。

    70820

    快速学习-Spring 事务控制

    第2章 Spring 事务控制 2.1 Spring 事务控制我们要明确 第一:JavaEE 体系进行分层开发,事务处理位于业务层,Spring 提供了分层设计业务层事务处理解决方案。...第二:spring 框架为我们提供了一组事务控制接口。具体在后面的第二小节介绍。这组接口是在spring-tx-5.0.2.RELEASE.jar 。...2.2 Spring 事务控制 API 介绍 2.2.1 PlatformTransactionManager 此接口是 spring 事务管理器,它里面提供了我们常用操作事务方法,如下图:...2.2.2.1 事务隔离级别 ? 2.2.2.2 事务传播行为 REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务,加入到这个事务。...以上三个位置优先级:方法>类>接口 2.4.2.3 第三步:在配置文件开启 spring 对注解事务支持 <!

    46920

    MySQL事务事务隔离级别

    比如:银行账户转账,从A账户向B账户转账10000.需要执行两条update语句。...对于数据库来说事务保证批量DML要么全成功,要么全失败。 事务四个特征ACID 原子性(Atomicity) 整个事务所有操作,必须作为一个单元全部完成(或全部取消)。...持久性(durability) 持久性是指一个事务一旦被提交,它对数据库数据改变就是永久性,接下来即使数据库发生故障也不应该对其有任何影响。 事务相关语句只有:DML语句。...因为它们这三个语句都适合数据库表当中“数据”相关事务存在是为了保证数据完整性,安全性。 假设所有的业务都能使用一条DML语句搞定,还需要事务机制吗? 不需要事务。...) 提交事务或者回滚事务(结束) 事务之间隔离级别 事务隔离性存在隔离级别,理论上隔离级别包括四个: 第一级别:读未提交(read uncommitted) 对方事务还没有提交,我们当前事务可以读取到对方未提交数据

    77720

    Spring调用事务失效,你是怎么解决

    前言 " 相信大家都遇到一种事务失效场景,那就是 Spring调用,就是在 Service 方法内,调用另一个加 @Transactional 注解方法,发现事务失效,这时候你是怎么解决呢?...当然故事结果是完美的,问题解决了。 2 事务 在开发涉及到同时操作多个表时候,要保证两个操作要么一起成功,要么一起失败,这时候就需要用到事务。...而事务使用过程中有以下几个注意事项: 事务只能应用到 public 方法上才会有效; 事务需要从外部调用Spring调用会失效; 建议事务注解 @Transactional 一般添加在实现类上。...因为代理模式只拦截通过代理传入外部方法调用,所以自调用事务是不生效。 官方解释还是比较简单明了,虽然我看不懂,但是不影响我截图。...4 总结 结束语 本文主要介绍为什么会遇到事务失效,以及事务失效避免方式,同时提供了三种方式来解决自调用事务失效问题。不足之处,欢迎指正。

    1.8K10

    Spring事务传播行为有哪些?

    1位工作2年小伙伴面试时候被问到这样一个问题,说,Spring事务传播行为有哪些?他说他在面试时候能想起来一些,但在实际项目开发又基本不需要配置。...1、事务传播行为 ENTER TITLE 在日常开发,我们经常会存在多个声明了事务方法相互调用,在这种情况下,会存在嵌套两个或两个以上事务情况,所谓事务传播行为就是指这些事务之间传播规则。...methodB()调用了methodA(),两个方法都显示开启了事务。...在Spring,一共定义了7种内置事务嵌套传播行为: 第1种:REQUIRED,它是Spring默认事务传播行为。表示如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。...第2种:REQUIRE_NEW:表示不管是否存在事务,都会新建一个事务,新建事务原来已经定义事务相互独立。外部事务抛出异常回滚不会影响内部事务正常提交。

    64010

    MySQL事务流程XA事务特点

    执行事务操作:在事务,可以执行一系列数据库操作,包括插入、更新、删除等。这些操作可以是简单单个语句,也可以是复杂事务嵌套。...事务流程核心思想是将多个需要一起执行操作视为一个整体,保证其在数据库一致性完整性。如果在事务执行过程中发生了错误,可以通过回滚操作来保证数据一致性,否则可以通过提交操作来永久保存修改。...MySQLXA事务普通事务有什么不同?MySQLXA事务是分布式事务,涉及多个独立资源管理器,其中每个资源管理器可以是不同数据库或系统。...原子性持久性:XA 事务确保跨多个资源管理器原子性持久性。 这意味着事务所做所有更改要么在所有资源管理器上提交,要么在所有资源管理器上回滚,从而确保事务一致性。...在常规事务,原子性持久性在单个数据库内得到保证。两阶段提交:XA 事务使用两阶段提交协议来协调跨多个资源管理器更改提交或回滚。

    30061

    Spring声明式与编程式事务区别,事务与非事务方法相互调用导致事务不生效问题

    事务传播案例: 事务在A类a()方法调用Bb()方法传播案例 A.a() B.b()事务配置 a()没有事务结果 a()有事务结果 REQUIRED b()创建自己事务; b()接受...问题三:同一个类方法自调用 在一个Service内部,事务方法之间嵌套调用,普通方法事务方法之间嵌套调用,都不会开启新事务.是因为spring采用动态代理机制来实现事务控制,而动态代理最终都是要调用原始对象...public void saveB(B b){ dao.saveB(a); } } Spring 事务实现是依赖于 AOP,当容器在创建 dmzService 这个 Bean 时,发现这个类存在了被...3.2、在事务方法A调用另外一个事务方法B,被调用方法B事务没起作用 @Service public class DmzService { @Transactional public void...saveB(B b){ dao.saveB(a); } } 实际上在调用 saveB 方法时,是直接调用目标类 saveB 方法,在 saveB 方法前后并不会有事务开启或者提交、回滚等操作

    1.3K41
    领券