首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏多线程

    Spring事务事务传播机制(2

    ❤️❤️❤️ Spring + Spring MVC + MyBatis专栏 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和完整性的机制。 书接上回:Spring事务事务传播机制(1) 2Spring 中设置事务隔离级别 Spring事务隔离级别可以通过 @Transactional 中的 isolation 属性进行设置,具体操作如下图所示 该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读 2、READ COMMITTED: 读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据因此它不会有脏读问题 、Spring 事务隔离级别有 5 种 而Spring事务隔离级别包含以下 5 种: Isolation.DEFAULT:以连接的数据库的事务隔离级别为主。 Spring 事务传播机制定义了多个包含了事务的方法,相互调用时,事务是如何在这些方法间进行传递的。 2、为什么需要事务传播机制?

    58820编辑于 2023-10-16
  • 来自专栏springboot

    spring事务

    二、事务的特性(ACID) 原子性:确保动作要么全部完成,要么完全不起作用 一致性:一旦所有事务动作完成,事务就要被提交。 数据保持一致性 隔离性:多个事务会同时处理相同的数据,每个事务都应该隔离开,防止数据损坏 持久性:事务一旦完成,无论系统如何,结果不受影响,事务结果持久化到硬盘中 三、基于xml配置文件方式 < -- 2.配置事务的增强,指定对哪个事务管理器进行增强 --> <tx:advice id="txAdvice" transaction-manager="transactionManager" -- 2.开启事务的注解 --> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven 事务方法(增删改)之间互相调用,事务的管理方式 isolation:事务传播行为 timeout:超时时间 ⑴ 事务需要在一定时间内进行提交,如果不提交进行回滚 ⑵ 默认值为-1,不超时

    25200编辑于 2025-01-20
  • 来自专栏Java面试笔试题

    Spring事务

    1、什么是事务事务是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。 2事务的特性 ①原子性:指事务的操作要么全部都发生,要么都不发生。 ③隔离性:指多个事务并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离(可以通过设置事务的隔离级别解决,后续会讲到)。 3、Spring事务管理器 Spring事务管理器高层抽象接口主要有3个接口 ①PlatformTransactionManager(平台事务管理器):主要是进行事务的提交回滚等功能。 4、PlatformTransactionManager接口 根据不同的持久化框架提供了不同的PlatformTransactionManager接口实现: ①使用Spring JDBC或iBatis 比如我要调用service1中的a()和service2中的b()才能完成一个业务这种情况。

    75100发布于 2019-12-19
  • 来自专栏Cikian技术站

    Spring事务

    一、Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 实现: 通过PlatformTransactionManager 实现任意两个账户间转账操作(A账户减钱,B账户加钱) 分析: 数据层提供基础操作,指定账户减钱(outMoney),指定账户加钱(inMoney) 业务层提供转账操作(transfer),调用减钱加钱的操作 提供2个账号和操作金额执行转账操作 @Transactional注解开启事务 Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务 三、Spring事务角色 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法 四、事务相关配置 属性 在业务层接口上添加Spring事务,设置事务传播行为REQUIRES_NEW(需要新事务): public interface LogService { @Transactional(propagation

    39021编辑于 2023-08-09
  • 来自专栏weixuqin 的专栏

    Spring 事务

    Spring 事务 关于理论性的内容,我在之前的一篇文章中介绍过,这里不再过多阐述,这里给出之前文章的链接:Spring 事务管理 什么是事务 是一组逻辑操作,要么执行,要么不执行。 -- 数据源 --> <property name="dataSource" ref="dataSource" /> </bean> Spring 事务接口 PlatformTransactionManager 2. TransactiDefinition 接口介绍: 该接口主要定义了一些表示事务属性(如隔离级别,传播行为等)的常量。当然还有一些方法,仅有篇幅,不对方法做介绍。 (2事务传播行为(为了解决业务层方法之间互相调用的事务问题): 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。 ,则加入该事务;如果当前没有事务,则创建一个新的事务

    73640发布于 2019-08-20
  • 来自专栏CSDN 迁移文章

    Spring 事务事务传播机制

    事务的回顾 在 MySQL 学习阶段,已经了解到了事务是一组操作的集合,也就是把所有的操作作为一个整体,一起向数据库提交或者撤销操作,要么同时成功,要么同时失败 一个事务的操作流程包括了,开启事务,执行事务操作 ,提交事务或回滚事务,对于回滚事务来说,如果程序在执行过程中出现了错误,那么此时就需要执行回滚事务 2. 编程式事务 Spring 手动操作事务和 MySQL 操作事务类似,也是分为开启事务,提交事务,回滚事务等三个操作,需要用到 DataSourceTransactionManager (事务管理器)来进行上述事务的操作 > <artifactId>spring-tx</artifactId> </dependency> 只需在要执行的方法上添加@Transactional注解,添加之后,如果没有发生异常就正常执行, 事务传播机制 事务传播机制是指在多个事务方法相互调用时,定义事务如何在这些方法之间传播的规则,也就是延用调用方法的事务还是再重新开启一个新事务 Spring 事务的传播机制有以下七种 事务传播机制 描述

    58910编辑于 2024-12-20
  • 来自专栏JAVA体系

    Spring源码】Spring事务原理

    2Spring事务基本概念 2.1、基础配置 我们先来回顾一下Spring事务的基础配置信息,以下由ChatGPT给我们提供的相关资料: 2.1.1、Spring事务的基础配置 1、问:Spring事务的基础配置 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,Spring也无法提供事务功能。 (上述第2步和第4步)。 而是交由Spring自己完成。那么Spring使用事务的方式有哪些呢?在 Spring 中,我们可以通过声明式事务管理和编程式事务管理两种方式来管理事务。 网上借来一张Spring事务API架构图: 3、事务嵌套 前面2章节都是从理论知识的角度阐述了事务的一些基本特性。显然这些背诵的八股文一下子就忘记了。接下来我们以实际业务的角度来分析一下几种传播机制。

    70910编辑于 2024-01-25
  • 来自专栏全栈学习专栏

    Spring系列九:Spring 事务

    ​ 该文章收录专栏: 叶秋学长Spring系列专栏 叶秋学长主页: 新星计划第三季人工智能赛道TOP2;退役复学在校大学生,全栈JAVA领域创作者,目光所至,皆为华夏 目录什么是事务? 23.Spring 事务的种类?24.Spring事务隔离级别?25.Spring事务传播机制?26.声明式事务实现原理了解吗?27.声明式事务在哪些情况下会失效?----什么是事务Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,Spring 是无法提供事务功能的。 接下来由叶秋学长带领你们学习Spring事务~23.Spring 事务的种类? ),且程序中存在调用链Service1#method1()->Service2#method2()->Service3#method3(),那么这3个服务类的三个方法通过Spring事务传播机制都工作在同一个事务

    2.1K20编辑于 2022-07-29
  • 来自专栏Cikian技术站

    Spring事务失效

    在使用Spring管理事务时会遇到一些情况使事务失效,下面列举一些常见的情况: 1. 可能有一些特殊情况导致使用MySQL 5.5.5之后版本的默认的存储引擎也为MyISAM,如果是这样,那么Spring事务便不会生效。 MyISAM,可以在MySQL的配置文件中修改新建表的默认引擎,当然,也可以修改表的引擎为InnoDB,如: 或使用命令: alter table tb_account engine =InnoD; 2. @Transactional注解所在的类不是 Spring 容器的 bean @Service public class LogServiceImpl implements LogService { DataSource必须和MyBatis中的DataSource一致,并且事务管理器要被Spring管理。

    42320编辑于 2023-08-09
  • 来自专栏涓流

    spring事务传播

    Spring 事务不生效的原因 同一个类中无事务方法调用一个有事务方法事务不生效 public void testTransactionWork() { insertTransaction(); Spring 事务的传播级别 Spring 事务传播级别与数据库事务隔离级别不同,传播分为 7 种级别: PROPAGATION_REQUIRED:Spring的默认传播级别,如果上下文中存在事务则加入当前事务 这里的原因是,当事务发生异常会设置一个状态 Rollback, 如果外围事务读到了这个异常的状态,提交的时候就会抛出上述的异常(详细代码可以看参考资料中 Spring 事务源码分析) PROPAGATION_REQUIRES_NEW new User(); user2.setName("李四"); userService.addRequiresNewException(user2); } 结果: 两种都成功插入,外围未开启事务 ,插入“张三”内部方法抛出异常,可以单独对子事务回滚 参考资料 Spring 事务源码剖析 一口气说出6中@Transactional失效的场景

    93720编辑于 2022-06-28
  • 来自专栏码农架构

    Spring 事务(Transaction)

    疫情期间在家重新读了《Spring in Action》,每次翻阅总有一些收获,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识简要总结梳理一下 1、基本概念 |-/ 事务的目的 |-/ 事务特性(ACID) |-/ 事务的7种传播行为 2、声明式事务 |-/ 配置方式 |-/ 实现原理 3、编程式事务 4、常见问题 Spring声明式事务让我们从复杂的事务处理中得到解脱。 声明事务 1、配置方式-注解元数据驱动的声明式事务(@Transactional)、也可以采用XML元数据驱动的声明式事务 2、实现原理-Spring事务采用AOP的方式实现、PlatformTransactionManager 4、Spring事务保存点savepoint,创建基于SavePoint的嵌套事务来实现编程式事务管理。

    94030发布于 2020-10-29
  • spring事务

    --spring tx Spring 事务管理jar包--> <dependency> <groupId>org.springframework</groupId 2.3 声明式事务 Spring框架提供了声明式事务管理的功能,允许开发者通过配置来定义事务规则,而无需编写大量的事务管理代码。 声明式事务是通过Spring的AOP(面向切面编程)来实现的,通常使用注解或XML配置来定义事务。 因为没有添加事务,图书的库存更新了,但是用户的余额没有更新 显然这样的结果是错误的,购买图书是一个完整的功能,更新库存和更新余额要么都成功要么都失败 3.3、加入事务 ①添加事务配置 在spring配置文件中引入 以下是Spring基于XML的声明式事务是如何实现的简要步骤: 4.1、准备工作 可以直接把基于注解的声明式事务的工程直接拷贝一份,改个名字即可 4.2、修改Spring配置文件 将Spring配置文件中去掉

    35110编辑于 2024-01-02
  • 来自专栏springboot

    Spring事务

    由并发事务所做的修改必须与任何其他并发事务所做的修改隔离 事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据 D:持久性(Durability 注解标识的位置 @Transactional标识在方法上,则只会影响该方法 @Transactional标识的类上,则会影响类中所有的方法 2事务属性:只读 对一个查询操作来说,如果我们把它设置成只读 在service1类和service2类中分别有a()方法和b()方法,两个方法都是事务 当a()方法执行过程中调用了b()方法,事务是如何传递的? 合并到一个事务里?还是开启一个新的事务? (requires_new):开启一个新的事务,如果一个事务已经存在,则将这个存在的事务挂起【不管有没有,直接开启一个新事务,开启的新事务和之前的事务不存在嵌套关系,之前事务被挂起】适用内部事务和外部事务不存在业务关联情况 被嵌套的事务可以独立于外层事务进行提交或回滚。如果外层事务不存在,行为就像REQUIRED一样【有事务的话,就在这个事务里再嵌套一个完全独立的事务,嵌套的事务可以独立的提交和回滚。

    33510编辑于 2025-01-21
  • 来自专栏向治洪

    spring事务配置

    log.setTime(new Date()); log.setDetail("XXX"); logManager.addLog(log); throw new Exception(); } 2、 如果没有事务则开启 比如说:在UserManager中addUser里开启了,那么在addLog时则他会去看有没有,有就用,所以可以保证在同一个事务嘛. 2.PROPAGATION_SUPPORTS: 如果没有活动事务,  则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行 4、Spring事务的隔离级别:级别超高效率越低 1.ISOLATION_DEFAULT 另外四个与JDBC的隔离级别相对应 2.ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。  spring中对hibernate的支持的几个重要API: hibernateDaoSupport实现了一个辅助的dao,他拿出来的session也是放到ThreadLocal里面的.

    1.1K90发布于 2018-01-30
  • 来自专栏DDD

    Spring事务(下)

    完整的文章字数超限了,分成上下两篇 spring事务(上) 隔离规则 用来解决并发事务时出现的问题,其使用TransactionDefinition中的静态变量来指定 ISOLATION_DEFAULT 将事务标识为只读,只读事务不修改任何数据; 对于JDBC只是简单的将连接设置为只读模式,对于更新将抛出异常; 对于一些其他ORM框架有一些优化作用,如在Hibernate中,Spring事务管理器将执行 setDefaultTimeout(10) 回滚规则 spring事务管理器会捕捉任何未处理的异常,然后依据规则决定是否回滚抛出异常的事务 默认配置下,Spring只有在抛出的异常为运行时unchecked ,在回滚或提交的时候需要应用对应的事务状态 编程式和声明式事务 Spring提供了对编程式事务和声明式事务的支持,编程式事务允许用户在代码中精确定义事务的边界 而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦 编程式 Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager 使用TransactionTemplate

    1.1K30发布于 2021-03-23
  • 来自专栏JMCui

    Spring 事务介绍

    Spring 本身并不实现事务Spring 事务的本质还是底层数据库对事务的支持,没有数据库事务的支持,Spring 事务就不会生效。 Spring 事务提供了一套抽象的事务管理,并且结合 Spring IOC 和 Spring AOP,简化了应用程序使用数据库事务,并且通过声明式事务,可以做到应用程序无侵入的事务功能。 (transactionStatus); } 2. 通过 TransactionTemplate 使用事务 @org.junit.Test public void test2() { PlatformTransactionManager 2.

    85230发布于 2021-04-02
  • Spring事务事务传播机制

    ,回滚事务) -- 开启事务 start transaction; -- 提交事务 commit; -- 回滚事务 rollback; 2.Spring事务的实现 Spring中的事务操作分为两类 @Transactional(rollbackFor = Exception.class) @RequestMapping("/r2") public String r2(String name,String Spring事务传播机制有以下7种: Propagation.REQUIRED:默认的事务传播级别.如果当前存在事务,则加入该事务.如果当前没有事务,则创建一个新的事务。 用户注册,插入一条数据(执行成功)(和p1使用同一个事务) 记录操作日志,插入一条数据(出现异常,执行失败)(和p1使用同一个事务) 因为步骤3出现异常,事务回滚.步骤2和3使用同一个事务 ,所以步骤2的数据也回滚了 3.3.3.2 REQUIRES_NEW(新建事务) 将上述UserService和LogService中相关方法事务传播机制改为Propagation.REQUIRES_NEW

    23710编辑于 2026-01-12
  • 来自专栏DDD

    spring事务(上)

    前言 这篇其实也要归纳到《常识》系列中,但这重点又是spring的介绍,故归档在spring系列中。 工作很多年,除了学生时代学过,事务还真没有用过。 在T1时刻开启了事务1,T2时刻开启了事务2, T3时刻事务1从数据库中查询所有记录,记录总共有一条, T4时刻事务2向数据库中插入一条记录,T6时刻事务2提交事务。 , T5事务2更新数据age=30,T6时刻事务2提交事务, T7事务1查询同一条数据,发现数据与第一次不一致。 在T1时刻开启了事务1,T2时刻开启了事务2, T3时刻事务1更新数据age=25, T5时刻事务2更新数据age=30, T6时刻提交事务, T7时刻事务2提交事务,把事务1的更新覆盖了。 Spring事务管理器 Spring事务管理涉及的接口的联系如下: ?

    94830发布于 2021-03-23
  • 来自专栏麋鹿的技术专栏

    Spring事务详解

    如果对Spring事务的@Transactional理解有限的话,确实很容易在开发中忽视一些细节问题,导致业务不可用的Bug。 3、@Transactional 应用在非 public 修饰的方法上 以下来自 Spring 官方文档: When using proxies, you should apply the @Transactional 之所以会失效是因为在Spring AOP 代理时,如上图所示 TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截,DynamicAdvisedInterceptor( Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;其他异常不会触发回滚事务。 如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定 rollbackFor属性。 ?

    1.1K20发布于 2020-11-09
  • 来自专栏用户5325874的专栏

    Spring事务—总结

    Spring事务 事务管理是应用系统开发中必不可少的一部分。Spring事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。 串行化的 (serializable) 所有事务请求串行执行 实现原理 利用Spring Aop实现的。 方法执行成功,则提交事务。如果执行方法中出现异常,则回滚事务Spring事务传播 事务传播行为指当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 Spring定义了七种传播行为: PROPAGATION_REQUIRED 如果上下文中存在一个事务,则加入到当前事务。如果没有事务则开启一个新的事务。 从上面的代码可以看出,ts2与ts1是两个独立的事务,互不相干。Ts2是否成功并不依赖于 ts1。

    3.5K50发布于 2020-01-16
领券