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

Spring事务传播实现子事务独立

在一些业务场景中,为了保持业务数据一致性,需要用到事务,特别是交易系统。...但是其中部分逻辑,比如订单关闭,需要自成一个独立事务,最重要是不能受到外部事务调用影响(比如外部异常,不能导致订单关闭子逻辑回滚)。...Spring使用事务传播特性,完美地解决这个问题 Spring事务传播 Spring在TransactionDefinition接口中规定了7种类型事务传播行为。...事务传播行为是Spring框架独有的事务增强特性,他不属于事务实际提供方数据库行为。这是Spring为我们提供强大工具箱,使用事务传播行可以为我们开发工作提供许多便利。...根据Spring事务传播类型,可以看出PROPAGATION_REQUIRES_NEW是可以满足我们需求 业务实现 这里我们假设创建订单时,需要完成了两步(插入用户,插入商品,这里没用关闭订单做示例了

1K11
您找到你想要的搜索结果了吗?
是的
没有找到

Spring事务管理---

Spring事务管理--- 编程式事务管理 使用PlatformTransactionManager进行编程式事务管理 使用TransactionTemplate进行编程式事务管理 编程创建基于SavePoint...-- 本文涉及到AOP组件,例如ProxyFactory等,如果不清楚建议先去翻看我之前AOP系列文章 ---- 编程式事务管理 回顾一下上面这张图: 通过Spring进行编程式事务管理有两种方式...这个时候就可以借鉴一下SpringJDBCTemplate设计思想,使用模板方法模式加callBack相互结合方式,对直接使用PlatformTransactionManager进行事务管理代码封装...---- XML元数据驱动声明式事务 Spring允许我们在IOC容器配置文件中直接指定事务相关元数据,我们可以使用以下四种方式在IOC容器配置文件中指定事务需要元数据。...使用Spring 2.x声明事务配置方式。

53910

推荐学java——Spring事务

事务出现也是为了很好解决现实生活中问题。 Spring 事务管理器 使用 Spring 事务管理器,管理不同数据库访问技术事务处理。...开发者只需要掌握 Spring事务处理这一个方案,就可以实现使用不用数据库访问技术事务管理。 事务管理面向Spring,由Spring管理事务,做事务提交,事务回滚。...事务管理器接口:PlatformTransactionManager,其有很多实现类,基本不同数据库访问技术都有对应实现类,我们要学习是 DataSourceTransactionManager...实现流程分析 除了业务分析和添加事务外,其他流程和一节内容是相同,再来温习一下具体步骤: 创建数据库、数据表 这里小编还用上节内容中数据库,表需要新建两张:sale 和 goods ....Spring项目,包括Dao层和业务层以及简单配置 《推荐学java》系列干到这里,小编似乎也有一种豁然开朗感觉,并没有开始学习前恐惧了,而是开轻松,大家加油~

90830

Spring事务详解

事务Spring中是如何运作 在了解嵌套事务之前,可以先看下单个事务Spring处理流程,以便后面可以更清晰地认识嵌套事务逻辑。...Spring事务使用AOP机制实现,会在@Transactional注解修饰方法前后分别织入开启事务逻辑,以及提交或回滚逻辑。...@Transactional可以修饰在方法或者类,区别就在于修饰于类,会对该类下符合条件方法(例如private修饰方法就不符合条件)前后都织入事务逻辑。...事务隔离级别 前面我们已经了解了数据库事务隔离级别,再来理解 Spring 事务隔离级别就容易多了。...@Transaction失效场景 作用于非public方法,之所以会失效是因为在Spring AOP 代理时,如下图所示 TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截

13540

java 配置事务回滚_Spring@Transactional事务回滚

Spring事务分为编程时事务和声明式事务,编程式事务:编程人员通过代码控制事务开启、回滚、提交,声明式事务:把事务处理交给spring。...实现事务回滚需要注意问题: 1.@Transactional 注解可以被应用于接口定义和接口方法、类定义和类 public 方法。 2....@Transactional 注解只能应用到 public 可见度方法。...如果你在 protected、private 或者 package-visible 方法使用 @Transactional 注解,它也不会报错,但是这个被注解方法将不会展示已配置事务设置。...将方法中出现异常抛出给spring事务 (3)去掉方法体中try catch (4)catch (Exception e) { throw e;}继续向上抛,目的是让spring事务捕获这个异常 除了以上注意问题

2.3K20

Spring事务控制

spring事务控制我们要明确事 第一:JavaEE 体系进行分层开发,事务处理位于业务层,Spring 提供了分层设计业务层事务处理解决方案。...第二:spring 框架为我们提供了一组事务控制接口。具体在后面的第二小节介绍。这组接口是在spring-tx-5.0.2.RELEASE.jar 中。...第三:spring 事务控制都是基于 AOP ,它既可以使用编程方式实现,也可以使用配置方式实现。我们学习重点是使用配置方式实现。...--spring中基于xml声明式事务控制配置步骤 1.配置事务管理器 2.配置事务通知 此时需要导入事务约束 tx名称空间和约束 同时也需要aop...--spring基于注解声明式事务控制步骤 1.配置事务管理器 2.开启spring对注解事务支持 3.在需要事务支持地方使用@Transactional

30920

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

Spring事务应用大纲 在看这篇文章,以及下篇源码分析文章我希望你对Spring AOP以及有充分了解,不然一些细节问题你可能看不明白,关于Spring AOP如果你能看完这三篇文章基本就没什么问题了...申明式事务例子我这里就省去了,我相信没几个人不会用吧..... Spring事务抽象 Spring事务抽象关键就是事务策略概念,事务策略是通过TransactionManager接口定义。...也有些是Spring赋予,例如事务传播机制。...Spring事务同步机制 Spring事务相关同步机制可以分为两类 资源同步 行为同步 什么是资源同步呢?...基于此,我们开始编写代码 我们只需要引入Spring相关依赖跟JDBC相关依赖即可,该项目仅仅是一个Spring环境下Java项目,没有Web依赖,也不是SpringBoot项目,项目结构如下: POM

91520

Spring事务

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

40920

java事务使用_Java跨库事务

事务是为解决数据安全操作提出事务控制实际就是控制数据安全访问。...即便是在数据库系统遇到故障情况下也不会丢失提交事务操作。 Java有几种类型事务Java事务类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。...3、Spring容器事务 Spring事务管理实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring事务接口来了解Spring实现事务具体策略。...3)、Java持久化API事务(JPA) Hibernate多年来一直是事实Java持久化标准,但是现在Java持久化API作为真正Java持久化标准进入大家视野。...事务属性可以理解成事务一些基本配置,描述了事务策略如何应用到方法

1.6K30

【小家javaSpring事务不生效原因大解读

1、概述 事务在后端开发中无处不在,是数据一致性最基本保证。在Spring中可以通过对方法进行事务配置,而不是像原来通过手动写代码方式实现事务操作,这在很大程度上减少了开发难度。...因此我们在使用spring事务时候,门槛变得异常低,小学生水平就能很好管理好事务,但是同学们或多或少都遇见过一些事务不生效难题,为啥呢?...本文就针对于此来做一些具体举例分析,尽量做到全覆盖 2、栗子 Spring团队建议在具体类(或类方法)使用 @Transactional 注解,而不要使用在类所要实现任何接口上。...需要改成InnoDB才能支持 **原因二:**入口方法必须是public,否则事务不起作用(这一点由SpringAOP特性决定,理论而言,不public也能切入,但spring可能是觉得private...另外private 方法, final 方法 和 static 方法不能添加事务,加了也不生效 **原因三:Spring事务管理默认只对出现运行期异常(java.lang.RuntimeException

2.9K30

Spring基础(十四):Spring事务回顾

Spring事务回顾一、事务概念事务(Transaction)指的是一个操作序列,该操作序列中多个操作要么都做,要么都不做,是一个不可分割工作单位,是数据库环境中逻辑工作单位,由DBMS中事务管理子系统负责事务处理...1、原子性原子是自然界最小颗粒,具有不可再分特性。事务所有操作可以看做一个原子,事务是应用中不可再分最小逻辑执行体。使用事务对数据进行修改操作序列,要么全部执行,要么全不执行。...3、隔离性隔离性是指各个事务执行互不干扰,任意一个事务内部操作对其他并发事务,都是隔离。也就是说:并发执行事务之间既不能看到对方中间状态,也不能相互影响。...在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务两次读数据之间,由于第二个事务修改导致第一个事务两次读取数据可能不太一样。...五、Spring中可以使用如下方式实现事务控制1、编程式(不推荐)2、声明式(掌握)注解(简单,必会)XML配置(繁琐,了解)

30651

Spring 事务传播类型、事务隔离级别

事务传播类型 spring 7种事务传播类型 PROPAGATION_REQUIRED: 如果当前没有事务,则创建一个新事务;如果当前存在事务,就加入该事务;该配置是最常用设置。...spring 5种隔离级别 ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认隔离级别,使用数据库默认事务隔离级别。...关键词: 幻读: 事务1 读取记录时,事务2 增加了记录并提交, 事务1 再次读取时可以看到事务2 新增记录。 指一个事务读取了一个未提交事务数据。...在一个事务内读取表中某一行数据,多次读取结果不同,一个事务读取到了另一个事务提交后数据。...脏读: 事务1 更新了记录, 但是没有提交,事务2 读取了更新后行, 然后事务1 回滚,现在事务2 读取无效。 在一个事务内读取了别的事务插入数据,导致前后读取不一致。

31520

Spring事务管理

Spring有一个基于AOP之上事务管理模块,这个模块能够帮助我们在逻辑层中很方便控制数据库事务。...以上使用到 @Transactional 注解不仅可以写在类名,还可以写在方法,写在类上表示控制整个类,写在方法上表示只控制某个方法。...timeout 该属性用于设置事务超时秒数,默认值为-1表示永不超时 使用Spring事务管理时注意几点: @Transactional 只能被应用到public方法, 对于其它非public...上面的例子中,其实正是 元素出现 开启 了事务行为。 Spring团队建议是你在具体类(或类方法)使用 @Transactional 注解,而不要使用在类所要实现任何接口上。...因此,请接受Spring团队建议并且在具体使用 @Transactional 注解。

65720

聊聊spring事务propagation

序 本文主要研究一下spring事务propagation Propagation org/springframework/transaction/annotation/Propagation.java...Never activates Spring synchronization....方法对各个传播级别进行了处理,比如针对PROPAGATION_REQUIRES_NEW,它会执行suspend当前事务,然后newTransactionStatus 小结 spring事务提供了各种传播级别可以设置...,它主要是为了方便处理事务嵌套场景,可以支持里外共用一个事务,或者里头新开事务等等,这样子可以解决里外重复开事务等问题。...但是这个用多了也要注意,在调用时候需要设置什么传播级别。其实其他语言可能没有事务传播这一说,一般就是尽量把代码写简单点,少用事务嵌套。

19720

Spring事务隔离级别

上篇文章给大家详细介绍Spring事务传播行为,在事务中我们需要关注事务传播行为和事务隔离级别这两个点,所以本文给大家介绍下事务隔离级别 事务隔离级别   事务隔离级别指的是一个事务对数据修改与另一个并行事务隔离程度...,当多个事务同时访问相同数据时,如果没有采取必要隔离机制,就可能发生以下问题: 问题 描述 脏读 一个事务读到另一个事务未提交更新数据 幻读 是指当事务不是独立执行时发生一种现象,例如第一个事务对一个表中数据进行了修改...不可重复读 比方说在同一个事务中先后执行两条一模一样select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到结果不一致,这就是不可重复读 Spring支持隔离级别 隔离级别 描述...Spring设置事务隔离级别 配置文件方式 <tx:attributes...而且万一Spring没有把这几种隔离级别实现很完善,出了问题就麻烦了。

1.1K30
领券